From 946b67d8dce28fde3b8ec32483e69de65d490971 Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Tue, 13 Nov 2012 02:11:01 +0300 Subject: [PATCH] [boost] Updated to 1.52 --- .../accumulators/framework/depends_on.hpp | 41 +- .../boost/accumulators/statistics/density.hpp | 2 +- .../boost/boost/algorithm/cxx11/copy_if.hpp | 6 +- .../boost/algorithm/cxx11/is_permutation.hpp | 8 +- 3party/boost/boost/algorithm/hex.hpp | 28 +- .../searching/boyer_moore_horspool.hpp | 5 + .../searching/knuth_morris_pratt.hpp | 5 + 3party/boost/boost/bimap/bimap.hpp | 2 +- .../boost/bimap/detail/map_view_base.hpp | 2 +- .../boost/bimap/detail/map_view_iterator.hpp | 8 +- .../boost/bimap/detail/set_view_iterator.hpp | 8 +- .../boost/bimap/relation/mutant_relation.hpp | 4 +- 3party/boost/boost/chrono/chrono_io.hpp | 15 + 3party/boost/boost/chrono/config.hpp | 53 +- .../boost/chrono/detail/static_assert.hpp | 2 +- 3party/boost/boost/chrono/duration.hpp | 28 +- 3party/boost/boost/chrono/io/duration_get.hpp | 542 +++++ 3party/boost/boost/chrono/io/duration_io.hpp | 230 ++ 3party/boost/boost/chrono/io/duration_put.hpp | 264 +++ .../boost/boost/chrono/io/duration_style.hpp | 35 + .../boost/boost/chrono/io/duration_units.hpp | 992 +++++++++ .../boost/boost/chrono/io/ios_base_state.hpp | 150 ++ .../boost/boost/chrono/io/time_point_get.hpp | 333 +++ .../boost/boost/chrono/io/time_point_io.hpp | 1058 ++++++++++ .../boost/boost/chrono/io/time_point_put.hpp | 261 +++ .../boost/chrono/io/time_point_units.hpp | 244 +++ 3party/boost/boost/chrono/io/timezone.hpp | 30 + .../chrono/io/utility/ios_base_state_ptr.hpp | 436 ++++ .../boost/chrono/io/utility/manip_base.hpp | 101 + .../boost/chrono/io/utility/to_string.hpp | 50 + 3party/boost/boost/chrono/io_v1/chrono_io.hpp | 74 +- 3party/boost/boost/chrono/time_point.hpp | 4 +- 3party/boost/boost/config/compiler/gcc.hpp | 2 +- .../boost/container/allocator_traits.hpp | 24 +- .../boost/boost/container/container_fwd.hpp | 52 +- 3party/boost/boost/container/deque.hpp | 1412 ++++++------- .../detail/adaptive_node_pool_impl.hpp | 3 +- .../container/detail/advanced_insert_int.hpp | 15 +- .../boost/container/detail/algorithms.hpp | 24 + .../boost/container/detail/destroyers.hpp | 111 +- .../boost/container/detail/flat_tree.hpp | 390 ++-- .../boost/container/detail/iterators.hpp | 103 +- .../detail/multiallocation_chain.hpp | 96 +- .../container/detail/node_alloc_holder.hpp | 96 +- .../boost/container/detail/preprocessor.hpp | 79 +- .../boost/container/detail/stored_ref.hpp | 92 - 3party/boost/boost/container/detail/tree.hpp | 175 +- .../boost/container/detail/utilities.hpp | 30 - .../boost/container/detail/workaround.hpp | 4 + 3party/boost/boost/container/flat_map.hpp | 889 ++++---- 3party/boost/boost/container/flat_set.hpp | 954 +++++---- 3party/boost/boost/container/list.hpp | 1205 ++++++----- 3party/boost/boost/container/map.hpp | 844 ++++---- .../boost/container/scoped_allocator.hpp | 32 +- 3party/boost/boost/container/set.hpp | 736 ++++--- 3party/boost/boost/container/slist.hpp | 1487 +++++++------ .../boost/boost/container/stable_vector.hpp | 1873 +++++++++-------- 3party/boost/boost/container/string.hpp | 1165 +++++----- 3party/boost/boost/container/vector.hpp | 1201 +++++------ 3party/boost/boost/context/all.hpp | 11 +- 3party/boost/boost/context/detail/config.hpp | 6 +- .../boost/context/detail/fcontext_arm.hpp | 16 +- .../boost/context/detail/fcontext_i386.hpp | 27 +- .../context/detail/fcontext_i386_win.hpp | 15 +- .../boost/context/detail/fcontext_mips.hpp | 18 +- .../boost/context/detail/fcontext_ppc.hpp | 16 +- .../boost/context/detail/fcontext_x86_64.hpp | 16 +- .../context/detail/fcontext_x86_64_win.hpp | 16 +- 3party/boost/boost/context/fcontext.hpp | 10 +- .../boost/context/guarded_stack_allocator.hpp | 55 + .../boost/context/simple_stack_allocator.hpp | 67 + 3party/boost/boost/context/stack_utils.hpp | 41 - .../{stack_allocator.hpp => utils.hpp} | 30 +- 3party/boost/boost/date_time/c_time.hpp | 2 +- 3party/boost/boost/date_time/date.hpp | 6 +- .../boost/boost/date_time/date_duration.hpp | 18 +- 3party/boost/boost/date_time/date_facet.hpp | 11 +- .../boost/boost/date_time/date_formatting.hpp | 6 +- .../boost/boost/date_time/date_generators.hpp | 70 +- .../boost/boost/date_time/date_iterator.hpp | 30 +- .../boost/boost/date_time/date_names_put.hpp | 52 +- 3party/boost/boost/date_time/date_parsing.hpp | 4 +- 3party/boost/boost/date_time/dst_rules.hpp | 4 +- .../date_time/dst_transition_generators.hpp | 2 +- .../boost/date_time/filetime_functions.hpp | 2 +- .../boost/date_time/format_date_parser.hpp | 8 +- .../date_time/gregorian/greg_serialize.hpp | 30 +- .../boost/date_time/gregorian_calendar.ipp | 2 +- .../date_time/local_time/custom_time_zone.hpp | 12 +- .../date_time/local_time/local_date_time.hpp | 4 +- .../date_time/local_time/posix_time_zone.hpp | 4 +- .../boost/date_time/period_formatter.hpp | 10 +- .../posix_time/posix_time_config.hpp | 4 +- .../date_time/posix_time/time_serialize.hpp | 4 +- .../boost/date_time/strings_from_facet.hpp | 2 +- .../boost/boost/date_time/time_duration.hpp | 23 +- 3party/boost/boost/date_time/time_facet.hpp | 2 +- .../boost/boost/date_time/time_iterator.hpp | 34 +- 3party/boost/boost/date_time/time_parsing.hpp | 9 +- .../boost/boost/date_time/time_zone_base.hpp | 18 +- 3party/boost/boost/date_time/tz_db_base.hpp | 2 +- 3party/boost/boost/date_time/wrapping_int.hpp | 54 +- 3party/boost/boost/detail/call_traits.hpp | 20 +- 3party/boost/boost/detail/interlocked.hpp | 17 + 3party/boost/boost/foreach.hpp | 14 +- .../boost/function/function_template.hpp | 51 +- .../boost/functional/detail/container_fwd.hpp | 19 +- .../functional/hash/detail/hash_float.hpp | 181 +- .../hash/detail/hash_float_generic.hpp | 91 - .../functional/hash/detail/hash_float_x86.hpp | 56 - 3party/boost/boost/functional/hash/hash.hpp | 13 + .../struct/detail/define_struct_inline.hpp | 239 ++- .../iteration/detail/preprocessed/fold.hpp | 2 +- .../detail/preprocessed/reverse_fold.hpp | 2 +- .../fusion/algorithm/query/detail/any.hpp | 2 +- .../boost/fusion/container/deque/deque.hpp | 87 +- .../fusion/container/deque/deque_fwd.hpp | 6 +- .../deque/detail/deque_forward_ctor.hpp | 14 +- .../deque/detail/deque_initial_size.hpp | 2 +- .../deque/detail/deque_keyed_values_call.hpp | 20 +- .../container/deque/detail/keyed_element.hpp | 48 +- .../detail/{cpp03_deque.hpp => pp_deque.hpp} | 43 +- .../{cpp03_deque_fwd.hpp => pp_deque_fwd.hpp} | 6 +- ...d_values.hpp => pp_deque_keyed_values.hpp} | 7 +- ...es.hpp => variadic_deque_keyed_values.hpp} | 17 +- .../boost/fusion/container/deque/limits.hpp | 2 +- .../vector/detail/vector_forward_ctor.hpp | 11 + .../container/vector/detail/vector_n.hpp | 79 +- .../boost/fusion/container/vector/vector.hpp | 22 + .../fusion/functional/invocation/invoke.hpp | 81 +- .../fusion/iterator/iterator_adapter.hpp | 4 +- .../fusion/sequence/intrinsic/has_key.hpp | 2 +- 3party/boost/boost/graph/astar_search.hpp | 2 +- .../graph/compressed_sparse_row_graph.hpp | 2 +- 3party/boost/boost/graph/core_numbers.hpp | 17 +- .../boost/boost/graph/detail/d_ary_heap.hpp | 5 + .../boost/graph/detail/indexed_properties.hpp | 4 +- .../boost/boost/graph/detail/set_adaptor.hpp | 2 +- .../distributed/adjlist/serialization.hpp | 13 +- 3party/boost/boost/graph/filtered_graph.hpp | 22 +- 3party/boost/boost/graph/grid_graph.hpp | 243 +-- .../boost/graph/is_kuratowski_subgraph.hpp | 2 +- 3party/boost/boost/graph/labeled_graph.hpp | 6 +- .../boost/graph/named_function_params.hpp | 14 +- 3party/boost/boost/graph/named_graph.hpp | 2 +- 3party/boost/boost/graph/properties.hpp | 8 +- 3party/boost/boost/graph/relax.hpp | 28 +- 3party/boost/boost/graph/reverse_graph.hpp | 8 +- 3party/boost/boost/graph/undirected_graph.hpp | 5 - 3party/boost/boost/graph/visitors.hpp | 4 +- .../boost/icl/concept/element_associator.hpp | 2 +- 3party/boost/boost/integer_traits.hpp | 2 +- .../interprocess/allocators/adaptive_pool.hpp | 14 +- .../interprocess/allocators/allocator.hpp | 14 +- .../allocators/cached_adaptive_pool.hpp | 8 +- .../allocators/cached_node_allocator.hpp | 8 +- .../allocators/detail/adaptive_node_pool.hpp | 4 +- .../allocators/detail/allocator_common.hpp | 45 +- .../allocators/detail/node_pool.hpp | 8 +- .../allocators/detail/node_tools.hpp | 2 +- .../allocators/node_allocator.hpp | 14 +- .../allocators/private_adaptive_pool.hpp | 10 +- .../allocators/private_node_allocator.hpp | 10 +- .../interprocess/anonymous_shared_memory.hpp | 6 +- .../containers/allocation_type.hpp | 2 +- .../containers/containers_fwd.hpp | 2 +- .../boost/interprocess/containers/deque.hpp | 2 +- .../interprocess/containers/flat_map.hpp | 2 +- .../interprocess/containers/flat_set.hpp | 2 +- .../boost/interprocess/containers/list.hpp | 2 +- .../boost/interprocess/containers/map.hpp | 2 +- .../boost/interprocess/containers/pair.hpp | 2 +- .../boost/interprocess/containers/set.hpp | 2 +- .../boost/interprocess/containers/slist.hpp | 2 +- .../interprocess/containers/stable_vector.hpp | 2 +- .../boost/interprocess/containers/string.hpp | 2 +- .../boost/interprocess/containers/vector.hpp | 2 +- .../interprocess/containers/version_type.hpp | 2 +- .../boost/interprocess/creation_tags.hpp | 2 +- .../boost/interprocess/detail/atomic.hpp | 162 +- .../boost/interprocess/detail/cast_tags.hpp | 2 +- .../interprocess/detail/config_begin.hpp | 2 +- .../boost/interprocess/detail/config_end.hpp | 2 +- .../interprocess/detail/file_wrapper.hpp | 12 +- .../detail/in_place_interface.hpp | 2 +- .../detail/intermodule_singleton.hpp | 2 +- .../detail/intermodule_singleton_common.hpp | 10 +- .../detail/interprocess_tester.hpp | 2 +- .../interprocess/detail/intersegment_ptr.hpp | 46 +- .../detail/managed_memory_impl.hpp | 16 +- .../detail/managed_multi_shared_memory.hpp | 22 +- .../detail/managed_open_or_create_impl.hpp | 18 +- .../interprocess/detail/math_functions.hpp | 4 +- .../boost/interprocess/detail/min_max.hpp | 2 +- .../boost/boost/interprocess/detail/move.hpp | 2 +- .../boost/boost/interprocess/detail/mpl.hpp | 2 +- .../detail/multi_segment_services.hpp | 2 +- .../boost/interprocess/detail/named_proxy.hpp | 10 +- .../interprocess/detail/os_file_functions.hpp | 52 +- .../detail/os_thread_functions.hpp | 4 +- .../interprocess/detail/pointer_type.hpp | 2 +- .../detail/portable_intermodule_singleton.hpp | 6 +- .../detail/posix_time_types_wrk.hpp | 2 +- .../interprocess/detail/preprocessor.hpp | 146 +- .../boost/interprocess/detail/ptime_wrk.hpp | 2 +- .../interprocess/detail/robust_emulation.hpp | 6 +- .../detail/segment_manager_helper.hpp | 12 +- .../interprocess/detail/tmp_dir_helpers.hpp | 2 +- .../detail/transform_iterator.hpp | 2 +- .../boost/interprocess/detail/type_traits.hpp | 15 +- .../boost/interprocess/detail/utilities.hpp | 64 +- .../detail/variadic_templates_tools.hpp | 2 +- .../boost/interprocess/detail/win32_api.hpp | 44 +- .../detail/windows_intermodule_singleton.hpp | 8 +- .../boost/interprocess/detail/workaround.hpp | 31 +- .../detail/xsi_shared_memory_device.hpp | 8 +- .../detail/xsi_shared_memory_file_wrapper.hpp | 8 +- 3party/boost/boost/interprocess/errors.hpp | 4 +- .../boost/boost/interprocess/exceptions.hpp | 2 +- .../boost/boost/interprocess/file_mapping.hpp | 8 +- .../interprocess/indexes/flat_map_index.hpp | 2 +- .../boost/interprocess/indexes/iset_index.hpp | 6 +- .../indexes/iunordered_set_index.hpp | 14 +- .../boost/interprocess/indexes/map_index.hpp | 2 +- .../boost/interprocess/indexes/null_index.hpp | 2 +- .../indexes/unordered_map_index.hpp | 2 +- .../boost/interprocess/interprocess_fwd.hpp | 2 +- .../boost/interprocess/ipc/message_queue.hpp | 338 ++- .../interprocess/managed_external_buffer.hpp | 6 +- .../interprocess/managed_heap_memory.hpp | 8 +- .../interprocess/managed_mapped_file.hpp | 6 +- .../interprocess/managed_shared_memory.hpp | 4 +- .../managed_windows_shared_memory.hpp | 4 +- .../managed_xsi_shared_memory.hpp | 4 +- .../boost/interprocess/mapped_region.hpp | 232 +- .../mem_algo/detail/mem_algo_common.hpp | 211 +- .../mem_algo/detail/simple_seq_fit_impl.hpp | 32 +- .../interprocess/mem_algo/rbtree_best_fit.hpp | 27 +- .../interprocess/mem_algo/simple_seq_fit.hpp | 2 +- .../boost/boost/interprocess/offset_ptr.hpp | 436 +++- .../boost/boost/interprocess/permissions.hpp | 2 +- .../boost/interprocess/segment_manager.hpp | 58 +- .../interprocess/shared_memory_object.hpp | 12 +- .../boost/interprocess/smart_ptr/deleter.hpp | 2 +- .../smart_ptr/detail/shared_count.hpp | 4 +- .../smart_ptr/detail/sp_counted_base.hpp | 2 +- .../detail/sp_counted_base_atomic.hpp | 2 +- .../smart_ptr/enable_shared_from_this.hpp | 2 +- .../interprocess/smart_ptr/intrusive_ptr.hpp | 8 +- .../interprocess/smart_ptr/scoped_ptr.hpp | 2 +- .../interprocess/smart_ptr/shared_ptr.hpp | 14 +- .../interprocess/smart_ptr/unique_ptr.hpp | 6 +- .../boost/interprocess/smart_ptr/weak_ptr.hpp | 10 +- .../interprocess/streams/bufferstream.hpp | 8 +- .../interprocess/streams/vectorstream.hpp | 10 +- .../sync/detail/condition_algorithm_8a.hpp | 130 +- .../sync/detail/condition_any_algorithm.hpp | 224 ++ .../boost/interprocess/sync/detail/locks.hpp | 66 + .../boost/interprocess/sync/file_lock.hpp | 10 +- .../sync/interprocess_condition.hpp | 58 +- .../sync/interprocess_condition_any.hpp | 129 ++ .../interprocess/sync/interprocess_mutex.hpp | 60 +- .../sync/interprocess_recursive_mutex.hpp | 2 +- .../sync/interprocess_semaphore.hpp | 2 +- .../sync/interprocess_sharable_mutex.hpp | 347 +++ .../sync/interprocess_upgradable_mutex.hpp | 54 +- .../boost/interprocess/sync/lock_options.hpp | 2 +- .../boost/interprocess/sync/mutex_family.hpp | 2 +- .../interprocess/sync/named_condition.hpp | 27 +- .../interprocess/sync/named_condition_any.hpp | 151 ++ .../boost/interprocess/sync/named_mutex.hpp | 21 +- .../sync/named_recursive_mutex.hpp | 2 +- .../interprocess/sync/named_semaphore.hpp | 2 +- .../sync/named_sharable_mutex.hpp | 231 ++ .../sync/named_upgradable_mutex.hpp | 34 +- .../boost/interprocess/sync/null_mutex.hpp | 2 +- .../interprocess/sync/posix/condition.hpp | 12 +- .../boost/interprocess/sync/posix/mutex.hpp | 5 +- .../interprocess/sync/posix/named_mutex.hpp | 2 +- .../sync/posix/named_semaphore.hpp | 2 +- .../sync/posix/pthread_helpers.hpp | 12 +- .../sync/posix/ptime_to_timespec.hpp | 2 +- .../sync/posix/recursive_mutex.hpp | 6 +- .../interprocess/sync/posix/semaphore.hpp | 2 +- .../sync/posix/semaphore_wrapper.hpp | 6 +- .../boost/interprocess/sync/scoped_lock.hpp | 6 +- .../boost/interprocess/sync/sharable_lock.hpp | 10 +- .../interprocess/sync/shm/named_condition.hpp | 189 +- .../sync/shm/named_condition_any.hpp | 192 ++ .../sync/shm/named_creation_functor.hpp | 4 +- .../interprocess/sync/shm/named_mutex.hpp | 15 +- .../sync/shm/named_recursive_mutex.hpp | 2 +- .../interprocess/sync/shm/named_semaphore.hpp | 2 +- .../sync/shm/named_upgradable_mutex.hpp | 2 +- .../interprocess/sync/spin/condition.hpp | 10 +- .../boost/interprocess/sync/spin/mutex.hpp | 4 +- .../sync/spin/recursive_mutex.hpp | 2 +- .../interprocess/sync/spin/semaphore.hpp | 2 +- .../interprocess/sync/upgradable_lock.hpp | 8 +- .../interprocess/sync/windows/condition.hpp | 87 +- .../boost/interprocess/sync/windows/mutex.hpp | 2 +- .../sync/windows/named_condition.hpp | 304 +-- .../sync/windows/named_condition_any.hpp | 241 +++ .../sync/windows/recursive_mutex.hpp | 2 +- .../interprocess/sync/windows/semaphore.hpp | 2 +- .../interprocess/sync/windows/sync_utils.hpp | 2 +- .../sync/xsi/simple_xsi_semaphore.hpp | 2 +- .../interprocess/sync/xsi/xsi_named_mutex.hpp | 8 +- .../interprocess/windows_shared_memory.hpp | 10 +- .../boost/interprocess/xsi_shared_memory.hpp | 6 +- 3party/boost/boost/intrusive/avltree.hpp | 14 +- .../intrusive/circular_slist_algorithms.hpp | 9 +- .../boost/intrusive/detail/avltree_node.hpp | 22 +- .../detail/common_slist_algorithms.hpp | 3 +- .../boost/intrusive/detail/list_node.hpp | 10 +- .../boost/intrusive/detail/rbtree_node.hpp | 34 +- .../boost/intrusive/detail/slist_node.hpp | 5 +- .../intrusive/detail/tree_algorithms.hpp | 35 +- .../boost/intrusive/detail/tree_node.hpp | 15 +- .../boost/intrusive/detail/utilities.hpp | 81 +- 3party/boost/boost/intrusive/hashtable.hpp | 622 +++--- 3party/boost/boost/intrusive/list.hpp | 16 +- 3party/boost/boost/intrusive/options.hpp | 6 - .../boost/boost/intrusive/pointer_traits.hpp | 2 +- 3party/boost/boost/intrusive/rbtree.hpp | 2 +- .../boost/intrusive/rbtree_algorithms.hpp | 21 +- 3party/boost/boost/intrusive/sgtree.hpp | 10 +- 3party/boost/boost/intrusive/slist.hpp | 82 +- 3party/boost/boost/intrusive/splaytree.hpp | 6 +- 3party/boost/boost/intrusive/treap.hpp | 10 +- .../iterator/function_input_iterator.hpp | 28 +- .../boost/boost/iterator/iterator_facade.hpp | 4 +- .../boost/boost/iterator/reverse_iterator.hpp | 2 +- 3party/boost/boost/lexical_cast.hpp | 222 +- 3party/boost/boost/math/bindings/e_float.hpp | 2 +- 3party/boost/boost/math/bindings/mpfr.hpp | 2 +- 3party/boost/boost/math/bindings/mpreal.hpp | 2 +- .../math/constants/calculate_constants.hpp | 3 +- 3party/boost/boost/math/distributions.hpp | 1 + .../boost/boost/math/distributions/beta.hpp | 49 +- .../boost/boost/math/distributions/cauchy.hpp | 19 +- .../boost/math/distributions/chi_squared.hpp | 34 +- .../detail/common_error_handling.hpp | 19 +- .../boost/math/distributions/exponential.hpp | 14 +- .../math/distributions/extreme_value.hpp | 49 +- .../boost/math/distributions/fisher_f.hpp | 8 +- .../math/distributions/inverse_gaussian.hpp | 18 +- .../boost/math/distributions/logistic.hpp | 8 +- .../boost/math/distributions/lognormal.hpp | 31 + .../math/distributions/non_central_beta.hpp | 11 +- .../math/distributions/non_central_t.hpp | 324 +-- .../boost/boost/math/distributions/normal.hpp | 19 +- .../boost/math/distributions/rayleigh.hpp | 12 +- .../boost/math/distributions/skew_normal.hpp | 103 +- .../boost/math/distributions/students_t.hpp | 342 ++- .../boost/math/distributions/weibull.hpp | 16 +- 3party/boost/boost/math/policies/policy.hpp | 8 +- 3party/boost/boost/math/special_functions.hpp | 7 +- .../boost/math/special_functions/airy.hpp | 246 +++ .../boost/math/special_functions/beta.hpp | 12 +- .../special_functions/detail/bessel_jy.hpp | 6 +- .../detail/bessel_jy_series.hpp | 2 +- .../math/special_functions/detail/erf_inv.hpp | 10 + .../boost/math/special_functions/expm1.hpp | 4 +- .../math/special_functions/fpclassify.hpp | 16 +- .../boost/math/special_functions/hankel.hpp | 11 +- .../special_functions/jacobi_elliptic.hpp | 320 +++ .../boost/math/special_functions/math_fwd.hpp | 176 +- .../boost/math/special_functions/next.hpp | 163 +- .../boost/math/special_functions/owens_t.hpp | 6 +- .../boost/boost/math/tools/big_constant.hpp | 2 +- 3party/boost/boost/math/tools/remez.hpp | 6 +- 3party/boost/boost/math/tr1_c_macros.ipp | 2 +- .../boost/numeric/ublas/matrix_sparse.hpp | 60 +- .../numeric/ublas/operation/num_columns.hpp | 6 +- .../numeric/ublas/operation/num_rows.hpp | 8 +- .../boost/numeric/ublas/operation/size.hpp | 6 +- 3party/boost/boost/numeric/ublas/storage.hpp | 2 - 3party/boost/boost/numeric/ublas/traits.hpp | 12 +- .../boost/boost/numeric/ublas/triangular.hpp | 373 ++-- .../boost/numeric/ublas/vector_expression.hpp | 2 + .../boost/numeric/ublas/vector_sparse.hpp | 49 +- 3party/boost/boost/optional/optional.hpp | 4 +- 3party/boost/boost/pending/indirect_cmp.hpp | 5 +- 3party/boost/boost/pending/property.hpp | 84 +- .../bind/detail/member_function_ptr.hpp | 4 +- .../phoenix/bind/detail/member_variable.hpp | 13 +- .../preprocessed/member_function_ptr_10.hpp | 20 +- .../preprocessed/member_function_ptr_20.hpp | 40 +- .../preprocessed/member_function_ptr_30.hpp | 60 +- .../preprocessed/member_function_ptr_40.hpp | 80 +- .../preprocessed/member_function_ptr_50.hpp | 100 +- 3party/boost/boost/phoenix/core/actor.hpp | 2 +- 3party/boost/boost/phoenix/core/arity.hpp | 2 +- .../phoenix/core/detail/actor_result_of.hpp | 4 +- .../phoenix/core/detail/function_eval.hpp | 14 +- .../preprocessed/actor_result_of_10.hpp | 22 +- .../preprocessed/actor_result_of_20.hpp | 42 +- .../preprocessed/actor_result_of_30.hpp | 62 +- .../preprocessed/actor_result_of_40.hpp | 82 +- .../preprocessed/actor_result_of_50.hpp | 102 +- .../detail/preprocessed/function_eval_10.hpp | 18 +- .../detail/preprocessed/function_eval_20.hpp | 38 +- .../detail/preprocessed/function_eval_30.hpp | 58 +- .../detail/preprocessed/function_eval_40.hpp | 78 +- .../detail/preprocessed/function_eval_50.hpp | 98 +- 3party/boost/boost/phoenix/core/domain.hpp | 16 +- .../boost/boost/phoenix/core/environment.hpp | 12 +- .../boost/boost/phoenix/core/expression.hpp | 2 +- .../boost/boost/phoenix/core/is_nullary.hpp | 2 +- .../boost/boost/phoenix/core/meta_grammar.hpp | 8 +- .../core/preprocessed/expression_10.hpp | 20 +- .../core/preprocessed/expression_20.hpp | 40 +- .../core/preprocessed/expression_30.hpp | 60 +- .../core/preprocessed/expression_40.hpp | 80 +- .../core/preprocessed/expression_50.hpp | 100 +- 3party/boost/boost/phoenix/core/value.hpp | 2 +- 3party/boost/boost/phoenix/object/delete.hpp | 2 +- .../detail/mem_fun_ptr_eval_result_of.hpp | 2 +- .../operator/detail/mem_fun_ptr_gen.hpp | 23 + .../preprocessed/mem_fun_ptr_gen_10.hpp | 21 + .../preprocessed/mem_fun_ptr_gen_20.hpp | 21 + .../preprocessed/mem_fun_ptr_gen_30.hpp | 21 + .../preprocessed/mem_fun_ptr_gen_40.hpp | 21 + .../preprocessed/mem_fun_ptr_gen_50.hpp | 21 + .../boost/boost/phoenix/operator/member.hpp | 30 +- .../operator/preprocessed/member_10.hpp | 62 +- .../operator/preprocessed/member_20.hpp | 102 +- .../operator/preprocessed/member_30.hpp | 142 +- .../operator/preprocessed/member_40.hpp | 182 +- .../operator/preprocessed/member_50.hpp | 222 +- 3party/boost/boost/phoenix/scope/dynamic.hpp | 2 +- 3party/boost/boost/phoenix/scope/lambda.hpp | 10 +- 3party/boost/boost/phoenix/scope/let.hpp | 4 +- .../phoenix/scope/preprocessed/lambda_10.hpp | 12 +- .../phoenix/scope/preprocessed/lambda_20.hpp | 12 +- .../phoenix/scope/preprocessed/lambda_30.hpp | 12 +- .../phoenix/scope/preprocessed/lambda_40.hpp | 12 +- .../phoenix/scope/preprocessed/lambda_50.hpp | 12 +- .../detail/preprocessed/switch_10.hpp | 36 +- .../detail/preprocessed/switch_20.hpp | 76 +- .../detail/preprocessed/switch_30.hpp | 116 +- .../detail/preprocessed/switch_40.hpp | 156 +- .../detail/preprocessed/switch_50.hpp | 196 +- .../detail/preprocessed/try_catch_eval_10.hpp | 40 +- .../detail/preprocessed/try_catch_eval_20.hpp | 80 +- .../detail/preprocessed/try_catch_eval_30.hpp | 120 +- .../detail/preprocessed/try_catch_eval_40.hpp | 160 +- .../detail/preprocessed/try_catch_eval_50.hpp | 200 +- .../boost/phoenix/statement/detail/switch.hpp | 4 +- .../statement/detail/try_catch_eval.hpp | 4 +- .../boost/phoenix/statement/do_while.hpp | 2 +- 3party/boost/boost/phoenix/statement/for.hpp | 2 +- 3party/boost/boost/phoenix/statement/if.hpp | 2 +- .../boost/boost/phoenix/statement/switch.hpp | 21 +- .../boost/boost/phoenix/statement/throw.hpp | 2 +- .../boost/phoenix/statement/try_catch.hpp | 23 +- .../boost/boost/phoenix/statement/while.hpp | 2 +- .../boost/phoenix/stl/container/container.hpp | 59 +- .../stl/container/detail/container.hpp | 20 + .../boost/boost/polygon/detail/boolean_op.hpp | 68 +- .../boost/polygon/detail/boolean_op_45.hpp | 132 +- .../detail/iterator_compact_to_points.hpp | 5 +- .../detail/iterator_geometry_to_set.hpp | 43 +- .../boost/boost/polygon/detail/max_cover.hpp | 12 +- .../boost/boost/polygon/detail/minkowski.hpp | 14 +- .../polygon/detail/polygon_45_formation.hpp | 250 +-- .../polygon/detail/polygon_45_set_view.hpp | 85 +- .../boost/polygon/detail/polygon_45_touch.hpp | 30 +- .../polygon/detail/polygon_90_set_view.hpp | 121 +- .../boost/polygon/detail/polygon_90_touch.hpp | 38 +- .../detail/polygon_arbitrary_formation.hpp | 328 +-- .../polygon/detail/polygon_formation.hpp | 249 ++- .../boost/polygon/detail/polygon_set_view.hpp | 96 +- .../boost/polygon/detail/polygon_simplify.hpp | 28 +- .../polygon/detail/polygon_sort_adaptor.hpp | 30 +- .../boost/polygon/detail/property_merge.hpp | 24 +- .../polygon/detail/property_merge_45.hpp | 18 +- .../polygon/detail/rectangle_formation.hpp | 59 +- .../boost/polygon/detail/scan_arbitrary.hpp | 333 ++- .../boost/polygon/detail/transform_detail.hpp | 177 +- .../boost/polygon/detail/voronoi_ctypes.hpp | 642 ++++++ .../polygon/detail/voronoi_predicates.hpp | 1526 ++++++++++++++ .../polygon/detail/voronoi_robust_fpt.hpp | 506 +++++ .../polygon/detail/voronoi_structures.hpp | 461 ++++ 3party/boost/boost/polygon/gmp_override.hpp | 13 +- 3party/boost/boost/polygon/gtl.hpp | 2 +- .../boost/boost/polygon/interval_concept.hpp | 388 ++-- 3party/boost/boost/polygon/interval_data.hpp | 34 +- .../boost/boost/polygon/interval_traits.hpp | 11 +- 3party/boost/boost/polygon/isotropy.hpp | 40 +- .../boost/boost/polygon/point_3d_concept.hpp | 92 +- 3party/boost/boost/polygon/point_3d_data.hpp | 10 +- .../boost/boost/polygon/point_3d_traits.hpp | 3 +- 3party/boost/boost/polygon/point_concept.hpp | 238 ++- 3party/boost/boost/polygon/point_data.hpp | 27 +- 3party/boost/boost/polygon/point_traits.hpp | 11 +- 3party/boost/boost/polygon/polygon.hpp | 9 +- .../boost/boost/polygon/polygon_45_data.hpp | 7 +- .../boost/polygon/polygon_45_set_concept.hpp | 34 +- .../boost/polygon/polygon_45_set_data.hpp | 191 +- .../boost/polygon/polygon_45_set_traits.hpp | 19 +- .../polygon/polygon_45_with_holes_data.hpp | 13 +- .../boost/boost/polygon/polygon_90_data.hpp | 11 +- .../boost/polygon/polygon_90_set_concept.hpp | 65 +- .../boost/polygon/polygon_90_set_data.hpp | 103 +- .../boost/polygon/polygon_90_set_traits.hpp | 52 +- .../polygon/polygon_90_with_holes_data.hpp | 13 +- 3party/boost/boost/polygon/polygon_data.hpp | 7 +- .../boost/polygon/polygon_set_concept.hpp | 90 +- .../boost/boost/polygon/polygon_set_data.hpp | 149 +- .../boost/polygon/polygon_set_traits.hpp | 21 +- 3party/boost/boost/polygon/polygon_traits.hpp | 265 ++- .../boost/polygon/polygon_with_holes_data.hpp | 15 +- .../boost/boost/polygon/rectangle_concept.hpp | 446 ++-- 3party/boost/boost/polygon/rectangle_data.hpp | 7 +- .../boost/boost/polygon/rectangle_traits.hpp | 3 +- .../boost/boost/polygon/segment_concept.hpp | 754 +++++++ 3party/boost/boost/polygon/segment_data.hpp | 108 + 3party/boost/boost/polygon/segment_traits.hpp | 38 + 3party/boost/boost/polygon/segment_utils.hpp | 159 ++ 3party/boost/boost/polygon/transform.hpp | 323 ++- 3party/boost/boost/polygon/voronoi.hpp | 155 ++ .../boost/boost/polygon/voronoi_builder.hpp | 517 +++++ .../boost/boost/polygon/voronoi_diagram.hpp | 620 ++++++ .../boost/polygon/voronoi_geometry_type.hpp | 46 + 3party/boost/boost/proto/args.hpp | 45 +- 3party/boost/boost/proto/context/default.hpp | 4 +- .../proto/context/detail/default_eval.hpp | 2 +- .../detail/preprocessed/default_eval.hpp | 16 +- 3party/boost/boost/proto/detail/any.hpp | 85 + .../boost/boost/proto/detail/basic_expr.hpp | 2 +- ...lasstypeof.hpp => class_member_traits.hpp} | 20 +- 3party/boost/boost/proto/detail/decltype.hpp | 91 +- 3party/boost/boost/proto/detail/expr.hpp | 2 +- .../boost/proto/detail/is_noncopyable.hpp | 65 + .../boost/proto/detail/poly_function.hpp | 31 +- .../proto/detail/preprocessed/basic_expr.hpp | 22 +- .../preprocessed/class_member_traits.hpp | 139 ++ .../proto/detail/preprocessed/classtypeof.hpp | 117 - .../boost/proto/detail/preprocessed/expr.hpp | 22 +- .../detail/preprocessed/expr_variadic.hpp | 22 +- .../proto/detail/preprocessed/traits.hpp | 40 +- .../boost/boost/proto/detail/static_const.hpp | 27 + 3party/boost/boost/proto/detail/traits.hpp | 4 +- 3party/boost/boost/proto/expr.hpp | 13 + 3party/boost/boost/proto/extends.hpp | 4 +- 3party/boost/boost/proto/functional.hpp | 1 + 3party/boost/boost/proto/functional/range.hpp | 19 + .../boost/proto/functional/range/begin.hpp | 51 + .../boost/proto/functional/range/empty.hpp | 34 + .../boost/proto/functional/range/end.hpp | 51 + .../boost/proto/functional/range/rbegin.hpp | 51 + .../boost/proto/functional/range/rend.hpp | 51 + .../boost/proto/functional/range/size.hpp | 45 + 3party/boost/boost/proto/functional/std.hpp | 1 + .../boost/proto/functional/std/iterator.hpp | 158 ++ 3party/boost/boost/proto/fusion.hpp | 191 +- 3party/boost/boost/proto/generate.hpp | 28 +- 3party/boost/boost/proto/matches.hpp | 12 +- 3party/boost/boost/proto/proto_fwd.hpp | 78 +- 3party/boost/boost/proto/traits.hpp | 24 +- 3party/boost/boost/proto/transform.hpp | 1 + 3party/boost/boost/proto/transform/arg.hpp | 43 +- .../boost/boost/proto/transform/default.hpp | 4 +- .../detail/default_function_impl.hpp | 2 +- .../transform/detail/make_gcc_workaround.hpp | 4 +- .../transform/detail/pass_through_impl.hpp | 20 +- .../preprocessed/default_function_impl.hpp | 16 +- .../detail/preprocessed/pass_through_impl.hpp | 200 +- 3party/boost/boost/proto/transform/env.hpp | 515 +++++ 3party/boost/boost/proto/transform/impl.hpp | 126 +- 3party/boost/boost/proto/transform/make.hpp | 2 +- .../boost/proto/transform/pass_through.hpp | 23 +- 3party/boost/boost/proto/transform/when.hpp | 23 +- .../boost/random/discrete_distribution.hpp | 2 +- .../piecewise_constant_distribution.hpp | 2 +- .../random/piecewise_linear_distribution.hpp | 2 +- 3party/boost/boost/random/seed_seq.hpp | 2 +- .../boost/random/subtract_with_carry.hpp | 4 +- .../boost/boost/range/algorithm/for_each.hpp | 1 + 3party/boost/boost/ratio/config.hpp | 86 + .../boost/ratio/detail/overflow_helpers.hpp | 34 +- 3party/boost/boost/ratio/detail/ratio_io.hpp | 1045 +++++++++ 3party/boost/boost/ratio/ratio.hpp | 54 +- 3party/boost/boost/ratio/ratio_fwd.hpp | 9 +- 3party/boost/boost/ratio/ratio_io.hpp | 631 ++---- .../boost/boost/ratio/ratio_static_string.hpp | 8 +- 3party/boost/boost/signals/connection.hpp | 2 +- .../boost/signals/detail/named_slot_map.hpp | 2 +- .../boost/boost/spirit/home/support/info.hpp | 2 +- 3party/boost/boost/thread/detail/config.hpp | 79 +- 3party/boost/boost/thread/detail/delete.hpp | 6 +- 3party/boost/boost/thread/detail/memory.hpp | 106 +- 3party/boost/boost/thread/detail/move.hpp | 8 +- 3party/boost/boost/thread/detail/thread.hpp | 29 +- 3party/boost/boost/thread/future.hpp | 227 +- 3party/boost/boost/thread/locks.hpp | 12 +- .../thread/pthread/condition_variable_fwd.hpp | 3 + 3party/boost/boost/thread/pthread/once.hpp | 48 +- .../boost/thread/pthread/recursive_mutex.hpp | 4 +- .../boost/thread/pthread/thread_data.hpp | 66 +- .../thread/pthread/thread_heap_alloc.hpp | 8 +- .../thread/win32/basic_recursive_mutex.hpp | 6 +- .../boost/thread/win32/basic_timed_mutex.hpp | 2 +- .../boost/thread/win32/condition_variable.hpp | 22 +- .../boost/thread/win32/interlocked_read.hpp | 20 +- .../boost/boost/thread/win32/thread_data.hpp | 46 +- .../boost/thread/win32/thread_heap_alloc.hpp | 2 +- .../boost/thread/win32/thread_primitives.hpp | 20 +- .../boost/boost/unordered/detail/allocate.hpp | 817 ++++--- .../boost/boost/unordered/detail/buckets.hpp | 861 +++----- .../boost/unordered/detail/equivalent.hpp | 194 +- 3party/boost/boost/unordered/detail/table.hpp | 789 +++++-- .../boost/boost/unordered/detail/unique.hpp | 195 +- .../boost/boost/unordered/unordered_map.hpp | 32 +- .../boost/boost/unordered/unordered_set.hpp | 32 +- .../utility/detail/result_of_iterate.hpp | 130 +- 3party/boost/boost/utility/result_of.hpp | 100 +- 3party/boost/boost/uuid/seed_rng.hpp | 12 +- 3party/boost/boost/uuid/sha1.hpp | 16 +- 3party/boost/boost/version.hpp | 4 +- 3party/boost/boost/wave/cpp_exceptions.hpp | 52 +- .../boost/wave/cpp_iteration_context.hpp | 4 +- .../wave/cpplexer/cpplexer_exceptions.hpp | 48 +- .../wave/cpplexer/re2clex/cpp_re2c_lexer.hpp | 96 +- .../boost/wave/cpplexer/re2clex/scanner.hpp | 16 +- .../wave/cpplexer/validate_universal_char.hpp | 94 +- .../xpressive/detail/utility/literals.hpp | 8 +- .../boost/boost/xpressive/regex_actions.hpp | 26 +- 3party/boost/boost/xpressive/regex_error.hpp | 1 + .../boost/xpressive/regex_primitives.hpp | 2 +- .../boost/xpressive/regex_token_iterator.hpp | 2 + 3party/boost/boost/xpressive/sub_match.hpp | 89 +- .../boost/xpressive/traits/c_regex_traits.hpp | 8 +- .../xpressive/traits/cpp_regex_traits.hpp | 12 +- 636 files changed, 35105 insertions(+), 17132 deletions(-) create mode 100644 3party/boost/boost/chrono/io/duration_get.hpp create mode 100644 3party/boost/boost/chrono/io/duration_io.hpp create mode 100644 3party/boost/boost/chrono/io/duration_put.hpp create mode 100644 3party/boost/boost/chrono/io/duration_style.hpp create mode 100644 3party/boost/boost/chrono/io/duration_units.hpp create mode 100644 3party/boost/boost/chrono/io/ios_base_state.hpp create mode 100644 3party/boost/boost/chrono/io/time_point_get.hpp create mode 100644 3party/boost/boost/chrono/io/time_point_io.hpp create mode 100644 3party/boost/boost/chrono/io/time_point_put.hpp create mode 100644 3party/boost/boost/chrono/io/time_point_units.hpp create mode 100644 3party/boost/boost/chrono/io/timezone.hpp create mode 100644 3party/boost/boost/chrono/io/utility/ios_base_state_ptr.hpp create mode 100644 3party/boost/boost/chrono/io/utility/manip_base.hpp create mode 100644 3party/boost/boost/chrono/io/utility/to_string.hpp delete mode 100644 3party/boost/boost/container/detail/stored_ref.hpp create mode 100644 3party/boost/boost/context/guarded_stack_allocator.hpp create mode 100644 3party/boost/boost/context/simple_stack_allocator.hpp delete mode 100644 3party/boost/boost/context/stack_utils.hpp rename 3party/boost/boost/context/{stack_allocator.hpp => utils.hpp} (60%) delete mode 100644 3party/boost/boost/functional/hash/detail/hash_float_generic.hpp delete mode 100644 3party/boost/boost/functional/hash/detail/hash_float_x86.hpp rename 3party/boost/boost/fusion/container/deque/detail/{cpp03_deque.hpp => pp_deque.hpp} (78%) rename 3party/boost/boost/fusion/container/deque/detail/{cpp03_deque_fwd.hpp => pp_deque_fwd.hpp} (92%) rename 3party/boost/boost/fusion/container/deque/detail/{cpp03_deque_keyed_values.hpp => pp_deque_keyed_values.hpp} (96%) rename 3party/boost/boost/fusion/container/deque/detail/{cpp11_deque_keyed_values.hpp => variadic_deque_keyed_values.hpp} (76%) create mode 100644 3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp create mode 100644 3party/boost/boost/interprocess/sync/detail/locks.hpp create mode 100644 3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp create mode 100644 3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp create mode 100644 3party/boost/boost/interprocess/sync/named_condition_any.hpp create mode 100644 3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp create mode 100644 3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp create mode 100644 3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp create mode 100644 3party/boost/boost/math/special_functions/airy.hpp create mode 100644 3party/boost/boost/math/special_functions/jacobi_elliptic.hpp create mode 100644 3party/boost/boost/polygon/detail/voronoi_ctypes.hpp create mode 100644 3party/boost/boost/polygon/detail/voronoi_predicates.hpp create mode 100644 3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp create mode 100644 3party/boost/boost/polygon/detail/voronoi_structures.hpp create mode 100644 3party/boost/boost/polygon/segment_concept.hpp create mode 100644 3party/boost/boost/polygon/segment_data.hpp create mode 100644 3party/boost/boost/polygon/segment_traits.hpp create mode 100644 3party/boost/boost/polygon/segment_utils.hpp create mode 100644 3party/boost/boost/polygon/voronoi.hpp create mode 100644 3party/boost/boost/polygon/voronoi_builder.hpp create mode 100644 3party/boost/boost/polygon/voronoi_diagram.hpp create mode 100644 3party/boost/boost/polygon/voronoi_geometry_type.hpp create mode 100644 3party/boost/boost/proto/detail/any.hpp rename 3party/boost/boost/proto/detail/{classtypeof.hpp => class_member_traits.hpp} (72%) create mode 100644 3party/boost/boost/proto/detail/is_noncopyable.hpp create mode 100644 3party/boost/boost/proto/detail/preprocessed/class_member_traits.hpp delete mode 100644 3party/boost/boost/proto/detail/preprocessed/classtypeof.hpp create mode 100644 3party/boost/boost/proto/detail/static_const.hpp create mode 100644 3party/boost/boost/proto/functional/range.hpp create mode 100644 3party/boost/boost/proto/functional/range/begin.hpp create mode 100644 3party/boost/boost/proto/functional/range/empty.hpp create mode 100644 3party/boost/boost/proto/functional/range/end.hpp create mode 100644 3party/boost/boost/proto/functional/range/rbegin.hpp create mode 100644 3party/boost/boost/proto/functional/range/rend.hpp create mode 100644 3party/boost/boost/proto/functional/range/size.hpp create mode 100644 3party/boost/boost/proto/functional/std/iterator.hpp create mode 100644 3party/boost/boost/proto/transform/env.hpp create mode 100644 3party/boost/boost/ratio/config.hpp create mode 100644 3party/boost/boost/ratio/detail/ratio_io.hpp diff --git a/3party/boost/boost/accumulators/framework/depends_on.hpp b/3party/boost/boost/accumulators/framework/depends_on.hpp index 76087b091d..eefc5b2919 100644 --- a/3party/boost/boost/accumulators/framework/depends_on.hpp +++ b/3party/boost/boost/accumulators/framework/depends_on.hpp @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include #include @@ -26,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -94,15 +97,49 @@ namespace boost { namespace accumulators template struct is_dependent_on : is_base_and_derived< - typename undroppable::type + typename feature_of::type>::type , typename undroppable::type > {}; + template + struct dependencies_of + { + typedef typename Feature::dependencies type; + }; + + // Should use mpl::insert_range, but doesn't seem to work with mpl sets + template + struct set_insert_range + : mpl::fold< + Range + , Set + , mpl::insert + > + {}; + + template + struct collect_abstract_features + : mpl::fold< + Features + , mpl::set0<> + , set_insert_range< + mpl::insert > + , collect_abstract_features > + > + > + {}; + template struct depends_on_base : mpl::inherit_linearly< - typename mpl::sort >::type + typename mpl::sort< + typename mpl::copy< + typename collect_abstract_features::type + , mpl::back_inserter > + >::type + , is_dependent_on + >::type // Don't inherit multiply from a feature , mpl::if_< is_dependent_on diff --git a/3party/boost/boost/accumulators/statistics/density.hpp b/3party/boost/boost/accumulators/statistics/density.hpp index 8835f47b69..63ce6d6dde 100644 --- a/3party/boost/boost/accumulators/statistics/density.hpp +++ b/3party/boost/boost/accumulators/statistics/density.hpp @@ -95,7 +95,7 @@ namespace impl } // Once cache_size samples have been accumulated, create num_bins bins of same size between - // the minimum and maximum of the cached samples as well as an under- and and an overflow bin. + // the minimum and maximum of the cached samples as well as under and overflow bins. // Store their lower bounds (bin_positions) and fill the bins with the cached samples (samples_in_bin). if (cnt == this->cache_size) { diff --git a/3party/boost/boost/algorithm/cxx11/copy_if.hpp b/3party/boost/boost/algorithm/cxx11/copy_if.hpp index 6d0ba00bae..8591cb54d1 100644 --- a/3party/boost/boost/algorithm/cxx11/copy_if.hpp +++ b/3party/boost/boost/algorithm/cxx11/copy_if.hpp @@ -39,7 +39,7 @@ OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator { for ( ; first != last; ++first ) if (p(*first)) - *result++ = first; + *result++ = *first; return result; } #endif @@ -75,7 +75,7 @@ OutputIterator copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) { for ( ; first != last && p(*first); ++first ) - *result++ = first; + *result++ = *first; return result; } @@ -109,7 +109,7 @@ template OutputIterator copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) { for ( ; first != last && !p(*first); ++first ) - *result++ = first; + *result++ = *first; return result; } diff --git a/3party/boost/boost/algorithm/cxx11/is_permutation.hpp b/3party/boost/boost/algorithm/cxx11/is_permutation.hpp index 33cb712378..526ca2e479 100644 --- a/3party/boost/boost/algorithm/cxx11/is_permutation.hpp +++ b/3party/boost/boost/algorithm/cxx11/is_permutation.hpp @@ -46,7 +46,7 @@ namespace detail { /// \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 +/// \brief Tests to see if 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 @@ -88,7 +88,7 @@ bool is_permutation ( ForwardIterator1 first1, ForwardIterator1 last1, } /// \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 +/// \brief Tests to see if 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 @@ -108,7 +108,7 @@ bool is_permutation ( ForwardIterator1 first, ForwardIterator1 last, ForwardIter #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 +/// \brief Tests to see if 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 @@ -119,7 +119,7 @@ bool is_permutation ( const Range &r, ForwardIterator 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 +/// \brief Tests to see if 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 diff --git a/3party/boost/boost/algorithm/hex.hpp b/3party/boost/boost/algorithm/hex.hpp index 3f3c0c694b..439ec46b9e 100644 --- a/3party/boost/boost/algorithm/hex.hpp +++ b/3party/boost/boost/algorithm/hex.hpp @@ -69,14 +69,18 @@ namespace detail { return std::copy ( res, res + num_hex_digits, out ); } +// this needs to be in an un-named namespace because it is not a template +// and might get included in several compilation units. This could cause +// multiple definition errors at link time. + namespace { 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 + 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 @@ -105,17 +109,17 @@ namespace detail { // 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 - struct hex_iterator_traits< std::ostream_iterator > { - typedef T value_type; - }; + template + struct hex_iterator_traits< std::ostream_iterator > { + typedef T value_type; + }; - template - bool iter_end ( Iterator current, Iterator last ) { return current == last; } - - template - bool ptr_end ( const T* ptr, const T* /*end*/ ) { return *ptr == '\0'; } - + template + bool iter_end ( Iterator current, Iterator last ) { return current == last; } + + template + bool ptr_end ( const T* ptr, const T* /*end*/ ) { return *ptr == '\0'; } + // What can we assume here about the inputs? // is std::iterator_traits::value_type always 'char' ? // Could it be wchar_t, say? Does it matter? diff --git a/3party/boost/boost/algorithm/searching/boyer_moore_horspool.hpp b/3party/boost/boost/algorithm/searching/boyer_moore_horspool.hpp index 5e59cf3220..758ded206b 100644 --- a/3party/boost/boost/algorithm/searching/boyer_moore_horspool.hpp +++ b/3party/boost/boost/algorithm/searching/boyer_moore_horspool.hpp @@ -14,6 +14,11 @@ #include #include + +#include +#include + +#include #include #include diff --git a/3party/boost/boost/algorithm/searching/knuth_morris_pratt.hpp b/3party/boost/boost/algorithm/searching/knuth_morris_pratt.hpp index cc83185c51..aaeeb51ccb 100644 --- a/3party/boost/boost/algorithm/searching/knuth_morris_pratt.hpp +++ b/3party/boost/boost/algorithm/searching/knuth_morris_pratt.hpp @@ -15,6 +15,11 @@ #include #include + +#include +#include + +#include #include #include diff --git a/3party/boost/boost/bimap/bimap.hpp b/3party/boost/boost/bimap/bimap.hpp index 3021b04ff0..e94b9ca9ac 100644 --- a/3party/boost/boost/bimap/bimap.hpp +++ b/3party/boost/boost/bimap/bimap.hpp @@ -382,7 +382,7 @@ class bimap friend class boost::serialization::access; template - void serialize(Archive & ar, const unsigned int version) + void serialize(Archive & ar, const unsigned int) { ar & serialization::make_nvp("mi_core",core); } diff --git a/3party/boost/boost/bimap/detail/map_view_base.hpp b/3party/boost/boost/bimap/detail/map_view_base.hpp index 7900901bfb..1357e65590 100644 --- a/3party/boost/boost/bimap/detail/map_view_base.hpp +++ b/3party/boost/boost/bimap/detail/map_view_base.hpp @@ -355,7 +355,7 @@ class non_mutable_data_unique_map_view_access } template< class CompatibleKey > - data_type_ & operator[](const CompatibleKey& k) + data_type_ & operator[](const CompatibleKey&) { BOOST_BIMAP_STATIC_ERROR( OPERATOR_BRACKET_IS_NOT_SUPPORTED, (Derived)); } diff --git a/3party/boost/boost/bimap/detail/map_view_iterator.hpp b/3party/boost/boost/bimap/detail/map_view_iterator.hpp index 4f0e20e00a..63368c61d8 100644 --- a/3party/boost/boost/bimap/detail/map_view_iterator.hpp +++ b/3party/boost/boost/bimap/detail/map_view_iterator.hpp @@ -97,13 +97,13 @@ struct map_view_iterator : public map_view_iterator_base - void save(Archive & ar, const unsigned int version) const + void save(Archive & ar, const unsigned int) const { ar << ::boost::serialization::make_nvp("mi_iterator",this->base()); } template< class Archive > - void load(Archive & ar, const unsigned int version) + void load(Archive & ar, const unsigned int) { CoreIterator iter; ar >> ::boost::serialization::make_nvp("mi_iterator",iter); @@ -178,13 +178,13 @@ struct const_map_view_iterator : friend class ::boost::serialization::access; template< class Archive > - void save(Archive & ar, const unsigned int version) const + void save(Archive & ar, const unsigned int) const { ar << ::boost::serialization::make_nvp("mi_iterator",this->base()); } template< class Archive > - void load(Archive & ar, const unsigned int version) + void load(Archive & ar, const unsigned int) { CoreIterator iter; ar >> ::boost::serialization::make_nvp("mi_iterator",iter); diff --git a/3party/boost/boost/bimap/detail/set_view_iterator.hpp b/3party/boost/boost/bimap/detail/set_view_iterator.hpp index d48f5c05b1..08d7a42b71 100644 --- a/3party/boost/boost/bimap/detail/set_view_iterator.hpp +++ b/3party/boost/boost/bimap/detail/set_view_iterator.hpp @@ -95,13 +95,13 @@ struct set_view_iterator : public set_view_iterator_base::type friend class ::boost::serialization::access; template< class Archive > - void save(Archive & ar, const unsigned int version) const + void save(Archive & ar, const unsigned int) const { ar << ::boost::serialization::make_nvp("mi_iterator",this->base()); } template< class Archive > - void load(Archive & ar, const unsigned int version) + void load(Archive & ar, const unsigned int) { CoreIterator iter; ar >> ::boost::serialization::make_nvp("mi_iterator",iter); @@ -171,13 +171,13 @@ struct const_set_view_iterator : public const_set_view_iterator_base - void save(Archive & ar, const unsigned int version) const + void save(Archive & ar, const unsigned int) const { ar << ::boost::serialization::make_nvp("mi_iterator",this->base()); } template< class Archive > - void load(Archive & ar, const unsigned int version) + void load(Archive & ar, const unsigned int) { CoreIterator iter; ar >> ::boost::serialization::make_nvp("mi_iterator",iter); diff --git a/3party/boost/boost/bimap/relation/mutant_relation.hpp b/3party/boost/boost/bimap/relation/mutant_relation.hpp index 9aa28e4cac..2142906bff 100644 --- a/3party/boost/boost/bimap/relation/mutant_relation.hpp +++ b/3party/boost/boost/bimap/relation/mutant_relation.hpp @@ -142,7 +142,7 @@ class relation_info_hook : public #ifndef BOOST_BIMAP_DISABLE_SERIALIZATION template< class Archive > - void serialize(Archive & ar, const unsigned int version) + void serialize(Archive & ar, const unsigned int) { ar & ::boost::serialization::make_nvp("left" , base_::left ); ar & ::boost::serialization::make_nvp("right", base_::right); @@ -188,7 +188,7 @@ class relation_info_hook : #ifndef BOOST_BIMAP_DISABLE_SERIALIZATION template< class Archive > - void serialize(Archive & ar, const unsigned int version) + void serialize(Archive & ar, const unsigned int) { ar & ::boost::serialization::make_nvp("left" , base_::left ); ar & ::boost::serialization::make_nvp("right", base_::right); diff --git a/3party/boost/boost/chrono/chrono_io.hpp b/3party/boost/boost/chrono/chrono_io.hpp index 29a8d3493e..ebd18a3dab 100644 --- a/3party/boost/boost/chrono/chrono_io.hpp +++ b/3party/boost/boost/chrono/chrono_io.hpp @@ -14,6 +14,21 @@ #define BOOST_CHRONO_CHRONO_IO_HPP #include + +//#if BOOST_CHRONO_VERSION == 2 +//#include +//#include +//#elif BOOST_CHRONO_VERSION == 1 +//#include +//#endif + +#if defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 +#include +#include +#else #include +#endif + +#include #endif // BOOST_CHRONO_CHRONO_IO_HPP diff --git a/3party/boost/boost/chrono/config.hpp b/3party/boost/boost/chrono/config.hpp index b7d0c0d198..7812dadf1c 100644 --- a/3party/boost/boost/chrono/config.hpp +++ b/3party/boost/boost/chrono/config.hpp @@ -25,6 +25,13 @@ #define BOOST_USE_WINDOWS_H #endif +#if ! defined BOOST_CHRONO_PROVIDES_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT \ + && ! defined BOOST_CHRONO_DONT_PROVIDE_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT + +# define BOOST_CHRONO_DONT_PROVIDE_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT + +#endif + // BOOST_CHRONO_POSIX_API, BOOST_CHRONO_MAC_API, or BOOST_CHRONO_WINDOWS_API // can be defined by the user to specify which API should be used @@ -100,20 +107,59 @@ // unicode support ------------------------------// -#if defined(BOOST_NO_UNICODE_LITERALS) || defined(BOOST_NO_CHAR16_T) || defined(BOOST_NO_CHAR32_T) +#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T) //~ #define BOOST_CHRONO_HAS_UNICODE_SUPPORT #else #define BOOST_CHRONO_HAS_UNICODE_SUPPORT 1 #endif #if ! defined BOOST_NOEXCEPT -#if defined(BOOST_NO_NOEXCEPT) +#if defined(BOOST_NO_CXX11_NOEXCEPT) #define BOOST_NOEXCEPT #else #define BOOST_NOEXCEPT noexcept #endif #endif +#if defined( BOOST_NO_CXX11_NUMERIC_LIMITS ) +#define BOOST_CHRONO_LIB_CONSTEXPR +#else +#define BOOST_CHRONO_LIB_CONSTEXPR BOOST_CONSTEXPR +#endif + +#if defined( BOOST_NO_CXX11_NUMERIC_LIMITS ) +# define BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW throw() +#else +#ifdef BOOST_NO_NOEXCEPT +# define BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW throw() +#else +# define BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW noexcept +#endif +#endif + + +#if defined BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING \ + && defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING +#error "BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING && BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING defined" +#endif + +#if defined BOOST_CHRONO_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 \ + && defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 +#error "BOOST_CHRONO_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 && BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 defined" +#endif + +#if ! defined BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING \ + && ! defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING +#define BOOST_CHRONO_PROVIDE_HYBRID_ERROR_HANDLING +#endif + +#if (BOOST_CHRONO_VERSION == 2) +#if ! defined BOOST_CHRONO_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 \ + && ! defined BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 +#define BOOST_CHRONO_DONT_PROVIDES_DEPRECATED_IO_SINCE_V2_0_0 +#endif +#endif + #ifdef BOOST_CHRONO_HEADER_ONLY #define BOOST_CHRONO_INLINE inline #define BOOST_CHRONO_STATIC inline @@ -143,7 +189,7 @@ #define BOOST_CHRONO_DECL #endif -//#define BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING + // enable automatic library variant selection ------------------------------// @@ -166,3 +212,4 @@ #endif // auto-linking disabled #endif // BOOST_CHRONO_HEADER_ONLY #endif // BOOST_CHRONO_CONFIG_HPP + diff --git a/3party/boost/boost/chrono/detail/static_assert.hpp b/3party/boost/boost/chrono/detail/static_assert.hpp index 1ad21a56ba..8615194754 100644 --- a/3party/boost/boost/chrono/detail/static_assert.hpp +++ b/3party/boost/boost/chrono/detail/static_assert.hpp @@ -11,7 +11,7 @@ #include -#ifndef BOOST_NO_STATIC_ASSERT +#ifndef BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_CHRONO_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG) #elif defined(BOOST_CHRONO_USES_STATIC_ASSERT) #include diff --git a/3party/boost/boost/chrono/duration.hpp b/3party/boost/boost/chrono/duration.hpp index e32357cc72..97fe3d75eb 100644 --- a/3party/boost/boost/chrono/duration.hpp +++ b/3party/boost/boost/chrono/duration.hpp @@ -51,7 +51,7 @@ time2_demo contained this comment: #include #include -#if !defined(BOOST_NO_STATIC_ASSERT) || !defined(BOOST_CHRONO_USES_MPL_ASSERT) +#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) || !defined(BOOST_CHRONO_USES_MPL_ASSERT) #define BOOST_CHRONO_A_DURATION_REPRESENTATION_CAN_NOT_BE_A_DURATION "A duration representation can not be a duration" #define BOOST_CHRONO_SECOND_TEMPLATE_PARAMETER_OF_DURATION_MUST_BE_A_STD_RATIO "Second template parameter of duration must be a boost::ratio" #define BOOST_CHRONO_DURATION_PERIOD_MUST_BE_POSITIVE "duration period must be positive" @@ -340,17 +340,17 @@ namespace detail namespace detail { template ::value> struct chrono_numeric_limits { - static T lowest() throw() {return (std::numeric_limits::min) ();} + static BOOST_CHRONO_LIB_CONSTEXPR T lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW {return (std::numeric_limits::min) ();} }; template struct chrono_numeric_limits { - static T lowest() throw() {return (std::numeric_limits::min) ();} + static BOOST_CHRONO_LIB_CONSTEXPR T lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW {return (std::numeric_limits::min) ();} }; template <> struct chrono_numeric_limits { - static float lowest() throw() + static BOOST_CHRONO_LIB_CONSTEXPR float lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW { return -(std::numeric_limits::max) (); } @@ -358,7 +358,7 @@ namespace detail { template <> struct chrono_numeric_limits { - static double lowest() throw() + static BOOST_CHRONO_LIB_CONSTEXPR double lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW { return -(std::numeric_limits::max) (); } @@ -366,7 +366,7 @@ namespace detail { template <> struct chrono_numeric_limits { - static long double lowest() throw() + static BOOST_CHRONO_LIB_CONSTEXPR long double lowest() BOOST_CHRONO_LIB_NOEXCEPT_OR_THROW { return -(std::numeric_limits::max)(); } @@ -381,12 +381,12 @@ template struct duration_values { static BOOST_CONSTEXPR Rep zero() {return Rep(0);} - static BOOST_CONSTEXPR Rep max BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CHRONO_LIB_CONSTEXPR Rep max BOOST_PREVENT_MACRO_SUBSTITUTION () { return (std::numeric_limits::max)(); } - static BOOST_CONSTEXPR Rep min BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CHRONO_LIB_CONSTEXPR Rep min BOOST_PREVENT_MACRO_SUBSTITUTION () { return detail::numeric_limits::lowest(); } @@ -452,8 +452,8 @@ namespace chrono { >::type* = 0 ) : rep_(r) { } //~duration() {} //= default; - BOOST_CONSTEXPR - duration(const duration& rhs) : rep_(rhs.rep_) {} // = default; + //BOOST_CONSTEXPR + //duration(const duration& rhs) : rep_(rhs.rep_) {} // = default; duration& operator=(const duration& rhs) // = default; { if (&rhs != this) rep_= rhs.rep_; @@ -484,7 +484,7 @@ namespace chrono { // arithmetic BOOST_CONSTEXPR - duration operator+() const {return *this;} + duration operator+() const {return duration(rep_);;} BOOST_CONSTEXPR duration operator-() const {return duration(-rep_);} duration& operator++() {++rep_; return *this;} @@ -514,11 +514,11 @@ namespace chrono { { return duration(duration_values::zero()); } - static BOOST_CONSTEXPR duration min BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CHRONO_LIB_CONSTEXPR duration min BOOST_PREVENT_MACRO_SUBSTITUTION () { return duration((duration_values::min)()); } - static BOOST_CONSTEXPR duration max BOOST_PREVENT_MACRO_SUBSTITUTION () + static BOOST_CHRONO_LIB_CONSTEXPR duration max BOOST_PREVENT_MACRO_SUBSTITUTION () { return duration((duration_values::max)()); } @@ -761,7 +761,7 @@ namespace detail // Duration >= template - inline + inline BOOST_CONSTEXPR bool operator>=(const duration& lhs, const duration& rhs) diff --git a/3party/boost/boost/chrono/io/duration_get.hpp b/3party/boost/boost/chrono/io/duration_get.hpp new file mode 100644 index 0000000000..6014603340 --- /dev/null +++ b/3party/boost/boost/chrono/io/duration_get.hpp @@ -0,0 +1,542 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// + +#ifndef BOOST_CHRONO_IO_DURATION_GET_HPP +#define BOOST_CHRONO_IO_DURATION_GET_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +/** + * Duration formatting facet for input. + */ +namespace boost +{ + namespace chrono + { + + namespace detail + { + template ::value> + struct duration_io_intermediate + { + typedef Rep type; + }; + + template + struct duration_io_intermediate + { + typedef typename mpl::if_c::value, long double, typename mpl::if_c< + is_signed::value, long long, unsigned long long>::type>::type type; + }; + + template + typename enable_if , bool>::type reduce(intermediate_type& r, + unsigned long long& den, std::ios_base::iostate& err) + { + typedef typename common_type::type common_type_t; + + // Reduce r * num / den + common_type_t t = math::gcd(common_type_t(r), common_type_t(den)); + r /= t; + den /= t; + if (den != 1) + { + // Conversion to Period is integral and not exact + err |= std::ios_base::failbit; + return false; + } + return true; + } + template + typename disable_if , bool>::type reduce(intermediate_type&, unsigned long long&, + std::ios_base::iostate&) + { + return true; + } + + } + + /** + * @c duration_get is used to parse a character sequence, extracting + * components of a duration into a class duration. + * Each get member parses a format as produced by a corresponding format specifier to time_put<>::put. + * If the sequence being parsed matches the correct format, the + * corresponding member of the class duration argument are set to the + * value used to produce the sequence; + * otherwise either an error is reported or unspecified values are assigned. + * In other words, user confirmation is required for reliable parsing of + * user-entered durations, but machine-generated formats can be parsed + * reliably. This allows parsers to be aggressive about interpreting user + * variations on standard formats. + * + * If the end iterator is reached during parsing of the get() member + * function, the member sets std::ios_base::eofbit in err. + */ + template > + class duration_get: public std::locale::facet + { + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of character string passed to member functions. + */ + typedef std::basic_string string_type; + /** + * Type of iterator used to scan the character buffer. + */ + typedef InputIterator iter_type; + + /** + * Construct a @c duration_get facet. + * @param refs + * @Effects Construct a @c duration_get facet. + * If the @c refs argument is @c 0 then destruction of the object is + * delegated to the @c locale, or locales, containing it. This allows + * the user to ignore lifetime management issues. On the other had, + * if @c refs is @c 1 then the object must be explicitly deleted; + * the @c locale will not do so. In this case, the object can be + * maintained across the lifetime of multiple locales. + */ + + explicit duration_get(size_t refs = 0) : + std::locale::facet(refs) + { + } + + /** + * @param s start input stream iterator + * @param end end input stream iterator + * @param ios a reference to a ios_base + * @param err the ios_base state + * @param d the duration + * @param pattern begin of the formatting pattern + * @param pat_end end of the formatting pattern + * + * Requires: [pattern,pat_end) shall be a valid range. + * + * Effects: The function starts by evaluating err = std::ios_base::goodbit. + * It then enters a loop, reading zero or more characters from s at + * each iteration. Unless otherwise specified below, the loop + * terminates when the first of the following conditions holds: + * - The expression pattern == pat_end evaluates to true. + * - The expression err == std::ios_base::goodbit evaluates to false. + * - The expression s == end evaluates to true, in which case the + * function evaluates err = std::ios_base::eofbit | std::ios_base::failbit. + * - The next element of pattern is equal to '%', followed by a conversion + * specifier character, format. + * If the number of elements in the range [pattern,pat_end) is not + * sufficient to unambiguously determine whether the conversion + * specification is complete and valid, the function evaluates + * err = std::ios_base::failbit. Otherwise, the function evaluates + * s = get_value(s, end, ios, err, r) when the conversion specification is 'v' and + * s = get_value(s, end, ios, err, rt) when the conversion specification is 'u'. + * If err == std::ios_base::goodbit holds after + * the evaluation of the expression, the function increments pattern to + * point just past the end of the conversion specification and continues + * looping. + * - The expression isspace(*pattern, ios.getloc()) evaluates to true, in + * which case the function first increments pattern until + * pattern == pat_end || !isspace(*pattern, ios.getloc()) evaluates to true, + * then advances s until s == end || !isspace(*s, ios.getloc()) is true, + * and finally resumes looping. + * - The next character read from s matches the element pointed to by + * pattern in a case-insensitive comparison, in which case the function + * evaluates ++pattern, ++s and continues looping. Otherwise, the function + * evaluates err = std::ios_base::failbit. + * + * Once r and rt are retrieved, + * Returns: s + */ + template + iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, + duration &d, const char_type *pattern, const char_type *pat_end) const + { + if (std::has_facet >(ios.getloc())) + { + duration_units const&facet = std::use_facet >(ios.getloc()); + return get(facet, s, end, ios, err, d, pattern, pat_end); + } + else + { + duration_units_default facet; + return get(facet, s, end, ios, err, d, pattern, pat_end); + } + } + + template + iter_type get(duration_units const&facet, iter_type s, iter_type end, std::ios_base& ios, + std::ios_base::iostate& err, duration &d, const char_type *pattern, const char_type *pat_end) const + { + + typedef typename detail::duration_io_intermediate::type intermediate_type; + intermediate_type r; + rt_ratio rt; + bool value_found = false, unit_found = false; + + const std::ctype& ct = std::use_facet >(ios.getloc()); + while (pattern != pat_end && err == std::ios_base::goodbit) + { + if (s == end) + { + err |= std::ios_base::eofbit; + break; + } + if (ct.narrow(*pattern, 0) == '%') + { + if (++pattern == pat_end) + { + err |= std::ios_base::failbit; + return s; + } + char cmd = ct.narrow(*pattern, 0); + switch (cmd) + { + case 'v': + { + if (value_found) + { + err |= std::ios_base::failbit; + return s; + } + value_found = true; + s = get_value(s, end, ios, err, r); + if (err & (std::ios_base::badbit | std::ios_base::failbit)) + { + return s; + } + break; + } + case 'u': + { + if (unit_found) + { + err |= std::ios_base::failbit; + return s; + } + unit_found = true; + s = get_unit(facet, s, end, ios, err, rt); + if (err & (std::ios_base::badbit | std::ios_base::failbit)) + { + return s; + } + break; + } + default: + BOOST_ASSERT(false && "Boost::Chrono internal error."); + break; + } + + ++pattern; + } + else if (ct.is(std::ctype_base::space, *pattern)) + { + for (++pattern; pattern != pat_end && ct.is(std::ctype_base::space, *pattern); ++pattern) + ; + for (; s != end && ct.is(std::ctype_base::space, *s); ++s) + ; + } + else if (ct.toupper(*s) == ct.toupper(*pattern)) + { + ++s; + ++pattern; + } + else + { + err |= std::ios_base::failbit; + return s; + } + + } + + unsigned long long num = rt.num; + unsigned long long den = rt.den; + + // r should be multiplied by (num/den) / Period + // Reduce (num/den) / Period to lowest terms + unsigned long long gcd_n1_n2 = math::gcd(num, Period::num); + unsigned long long gcd_d1_d2 = math::gcd(den, Period::den); + num /= gcd_n1_n2; + den /= gcd_d1_d2; + unsigned long long n2 = Period::num / gcd_n1_n2; + unsigned long long d2 = Period::den / gcd_d1_d2; + if (num > (std::numeric_limits::max)() / d2 || den + > (std::numeric_limits::max)() / n2) + { + // (num/den) / Period overflows + err |= std::ios_base::failbit; + return s; + } + num *= d2; + den *= n2; + + typedef typename common_type::type common_type_t; + + // num / den is now factor to multiply by r + if (!detail::reduce(r, den, err)) return s; + + if (chrono::detail::gt(r, ( (duration_values::max)() / num))) + { + // Conversion to Period overflowed + err |= std::ios_base::failbit; + return s; + } + common_type_t t = r * num; + t /= den; + if (t > 0) + { + Rep pt = t; + if ( (duration_values::max)() < pt) + { + // Conversion to Period overflowed + err |= std::ios_base::failbit; + return s; + } + } + // Success! Store it. + r = Rep(t); + d = duration (r); + + return s; + } + + /** + * + * @param s start input stream iterator + * @param end end input stream iterator + * @param ios a reference to a ios_base + * @param err the ios_base state + * @param d the duration + * Stores the duration pattern from the @c duration_unit facet in let say @c str. Last as if + * @code + * return get(s, end, ios, err, ios, d, str.data(), str.data() + str.size()); + * @codeend + * @Returns An iterator pointing just beyond the last character that can be determined to be part of a valid name + */ + template + iter_type get(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, + duration & d) const + { + if (std::has_facet >(ios.getloc())) + { + duration_units const&facet = std::use_facet >(ios.getloc()); + std::basic_string str = facet.get_pattern(); + return get(facet, s, end, ios, err, d, str.data(), str.data() + str.size()); + } + else + { + duration_units_default facet; + std::basic_string str = facet.get_pattern(); + return get(facet, s, end, ios, err, d, str.data(), str.data() + str.size()); + } + } + + /** + * + * @param s start input stream iterator + * @param end end input stream iterator + * @param ios a reference to a ios_base + * @param err the ios_base state + * @param r a reference to the duration representation. + * @Effects As if + * @code + * return std::use_facet >(ios.getloc()).get(s, end, ios, err, r); + * @endcode + * + * @Returns An iterator pointing just beyond the last character that can be determined to be part of a valid name + */ + template + iter_type get_value(iter_type s, iter_type end, std::ios_base& ios, std::ios_base::iostate& err, Rep& r) const + { + return std::use_facet >(ios.getloc()).get(s, end, ios, err, r); + } + + /** + * + * @param s start input stream iterator + * @param e end input stream iterator + * @param ios a reference to a ios_base + * @param err the ios_base state + * @param rt a reference to the duration run-time ratio. + * @Returns An iterator pointing just beyond the last character that can be determined to be part of a valid name + */ + iter_type get_unit(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, rt_ratio &rt) const + { + if (std::has_facet >(is.getloc())) + { + return get_unit(std::use_facet >(is.getloc()), i, e, is, err, rt); + } + else + { + duration_units_default facet; + return get_unit(facet, i, e, is, err, rt); + } + } + + + iter_type get_unit(duration_units const &facet, iter_type i, iter_type e, std::ios_base& is, + std::ios_base::iostate& err, rt_ratio &rt) const + { + + if (*i == '[') + { + // parse [N/D]s or [N/D]second or [N/D]seconds format + ++i; + i = std::use_facet >(is.getloc()).get(i, e, is, err, rt.num); + if ( (err & std::ios_base::failbit) != 0) + { + return i; + } + + if (i == e) + { + err |= std::ios_base::failbit; + return i; + } + CharT x = *i++; + if (x != '/') + { + err |= std::ios_base::failbit; + return i; + } + i = std::use_facet >(is.getloc()).get(i, e, is, err, rt.den); + if ( (err & std::ios_base::failbit) != 0) + { + return i; + } + if (i == e) + { + err |= std::ios_base::failbit; + return i; + } + if (*i != ']') + { + err |= std::ios_base::failbit; + return i; + } + ++i; + if (i == e) + { + err |= std::ios_base::failbit; + return i; + } + // parse s or second or seconds + return do_get_n_d_valid_unit(facet, i, e, is, err); + } + else + { + return do_get_valid_unit(facet, i, e, is, err, rt); + } + } + + /** + * Unique identifier for this type of facet. + */ + static std::locale::id id; + + /** + * @Effects Destroy the facet + */ + ~duration_get() + { + } + + protected: + + /** + * Extracts the run-time ratio associated to the duration when it is given in prefix form. + * + * This is an extension point of this facet so that we can take in account other periods that can have a useful + * translation in other contexts, as e.g. days and weeks. + * + * @param facet the duration_units facet + * @param s start input stream iterator. + * @param e end input stream iterator. + * @param ios a reference to a ios_base. + * @param err the ios_base state. + * @return @c s + */ + iter_type do_get_n_d_valid_unit(duration_units const &facet, iter_type i, iter_type e, + std::ios_base&, std::ios_base::iostate& err) const + { + // parse SI name, short or long + + const string_type* units = facet.get_n_d_valid_units_start(); + const string_type* units_end = facet.get_n_d_valid_units_end(); + + const string_type* k = chrono_detail::scan_keyword(i, e, units, units_end, + //~ std::use_facet >(loc), + err); + if (!facet.match_n_d_valid_unit(k)) + { + err |= std::ios_base::failbit; + } + + return i; + } + + /** + * Extracts the run-time ratio associated to the duration when it is given in prefix form. + * + * This is an extension point of this facet so that we can take in account other periods that can have a useful + * translation in other contexts, as e.g. days and weeks. + * + * @param facet the duration_units facet + * @param s start input stream iterator. + * @param e end input stream iterator. + * @param ios a reference to a ios_base. + * @param err the ios_base state. + * @param rt a reference to the duration run-time ratio. + * @Effects + * @Returns An iterator pointing just beyond the last character that can be determined to be part of a valid name. + */ + iter_type do_get_valid_unit(duration_units const &facet, iter_type i, iter_type e, + std::ios_base&, std::ios_base::iostate& err, rt_ratio &rt) const + { + // parse SI name, short or long + + const string_type* units = facet.get_valid_units_start(); + const string_type* units_end = facet.get_valid_units_end(); + + err = std::ios_base::goodbit; + const string_type* k = chrono_detail::scan_keyword(i, e, units, units_end, + //~ std::use_facet >(loc), + err); + + if (!facet.match_valid_unit(k, rt)) + { + err |= std::ios_base::failbit; + } + return i; + + } + }; + + /** + * Unique identifier for this type of facet. + */ + template + std::locale::id duration_get::id; + + } // chrono +} +// boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/duration_io.hpp b/3party/boost/boost/chrono/io/duration_io.hpp new file mode 100644 index 0000000000..6fcafd0f30 --- /dev/null +++ b/3party/boost/boost/chrono/io/duration_io.hpp @@ -0,0 +1,230 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// This code was adapted by Vicente from Howard Hinnant's experimental work +// on chrono i/o to Boost + +#ifndef BOOST_CHRONO_IO_DURATION_IO_HPP +#define BOOST_CHRONO_IO_DURATION_IO_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost +{ + namespace chrono + { + + /** + * duration parameterized manipulator. + */ + + class duration_fmt: public manip + { + duration_style style_; + public: + + /** + * explicit manipulator constructor from a @c duration_style + */ + explicit duration_fmt(duration_style style)BOOST_NOEXCEPT + : style_(style) + {} + + /** + * Change the duration_style ios state; + */ + void operator()(std::ios_base &ios) const + + { + set_duration_style(ios, style_); + } + }; + + /** + * duration_style i/o saver. + * + * See Boost.IO i/o state savers for a motivating compression. + */ + struct duration_style_io_saver + { + + //! the type of the state to restore + typedef std::ios_base state_type; + //! the type of aspect to save + typedef duration_style aspect_type; + + /** + * Explicit construction from an i/o stream. + * + * Store a reference to the i/o stream and the value of the associated @c duration_style. + */ + explicit duration_style_io_saver(state_type &s) : + s_save_(s) + { + a_save_ = get_duration_style(s_save_); + } + + /** + * Construction from an i/o stream and a @c duration_style to restore. + * + * Stores a reference to the i/o stream and the value @c duration_style to restore given as parameter. + */ + duration_style_io_saver(state_type &s, aspect_type new_value) : + s_save_(s), a_save_(new_value) + { + } + + /** + * Destructor. + * + * Restores the i/o stream with the duration_style to be restored. + */ + ~duration_style_io_saver() + { + this->restore(); + } + + /** + * Restores the i/o stream with the duration_style to be restored. + */ + void restore() + { + set_duration_style(s_save_, a_save_); + } + + private: + state_type& s_save_; + aspect_type a_save_; + }; + + /** + * duration stream inserter + * @param os the output stream + * @param d to value to insert + * @return @c os + */ + template + std::basic_ostream& + operator<<(std::basic_ostream& os, const duration& d) + { + typedef std::basic_string string_type; +#ifndef BOOST_NO_EXCEPTIONS + bool failed = false; + try // BOOST_NO_EXCEPTIONS protected +#endif + { + std::ios_base::iostate err = std::ios_base::goodbit; +#ifndef BOOST_NO_EXCEPTIONS + try // BOOST_NO_EXCEPTIONS protected +#endif + { + typename std::basic_ostream::sentry opfx(os); + if (bool(opfx)) + { + if (!std::has_facet >(os.getloc())) + { + if (duration_put ().put(os, os, os.fill(), d) .failed()) + { + err = std::ios_base::badbit; + } + } + else if (std::use_facet >(os.getloc()) .put(os, os, os.fill(), d) .failed()) + { + err = std::ios_base::badbit; + } + os.width(0); + } + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + bool flag = false; + try // BOOST_NO_EXCEPTIONS protected + { + os.setstate(std::ios_base::failbit); + } + catch (std::ios_base::failure ) // BOOST_NO_EXCEPTIONS protected + { + flag = true; + } + if (flag) throw; + } +#endif + if (err) os.setstate(err); + return os; + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + failed = true; + } + if (failed) os.setstate(std::ios_base::failbit | std::ios_base::badbit); +#endif + return os; + } + + /** + * + * @param is the input stream + * @param d the duration + * @return @c is + */ + template + std::basic_istream& + operator>>(std::basic_istream& is, duration& d) + { + std::ios_base::iostate err = std::ios_base::goodbit; + +#ifndef BOOST_NO_EXCEPTIONS + try // BOOST_NO_EXCEPTIONS protected +#endif + { + typename std::basic_istream::sentry ipfx(is); + if (bool(ipfx)) + { + if (!std::has_facet >(is.getloc())) + { + duration_get ().get(is, std::istreambuf_iterator(), is, err, d); + } + else + { + std::use_facet >(is.getloc()) .get(is, std::istreambuf_iterator(), is, + err, d); + } + } + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + bool flag = false; + try // BOOST_NO_EXCEPTIONS protected + { + is.setstate(std::ios_base::failbit); + } + catch (std::ios_base::failure ) // BOOST_NO_EXCEPTIONS protected + { + flag = true; + } + if (flag) throw; // BOOST_NO_EXCEPTIONS protected + } +#endif + if (err) is.setstate(err); + return is; + } + + } // chrono + +} + +#endif // header diff --git a/3party/boost/boost/chrono/io/duration_put.hpp b/3party/boost/boost/chrono/io/duration_put.hpp new file mode 100644 index 0000000000..7bd0cd7db1 --- /dev/null +++ b/3party/boost/boost/chrono/io/duration_put.hpp @@ -0,0 +1,264 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// + +/** + * Duration formatting facet for output. + */ +#ifndef BOOST_CHRONO_IO_DURATION_PUT_HPP +#define BOOST_CHRONO_IO_DURATION_PUT_HPP + +#include +#include +#include +#include + +namespace boost +{ + namespace chrono + { + + /** + * @tparam ChatT a character type + * @tparam OutputIterator a model of @c OutputIterator + * + * The @c duration_put facet provides facilities for formatted output of duration values. + * The member function of @c duration_put take a duration and format it into character string representation. + * + */ + template > + class duration_put: public std::locale::facet + { + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of character string passed to member functions. + */ + typedef std::basic_string string_type; + /** + * Type of iterator used to write in the character buffer. + */ + typedef OutputIterator iter_type; + + /** + * Construct a duration_put facet. + * @param refs + * @Effects Construct a duration_put facet. + * If the @c refs argument is @c 0 then destruction of the object is + * delegated to the @c locale, or locales, containing it. This allows + * the user to ignore lifetime management issues. On the other had, + * if @c refs is @c 1 then the object must be explicitly deleted; + * the @c locale will not do so. In this case, the object can be + * maintained across the lifetime of multiple locales. + */ + explicit duration_put(size_t refs = 0) : + std::locale::facet(refs) + { + } + + /** + * + * @param s an output stream iterator + * @param ios a reference to a ios_base + * @param fill the character used as filler + * @param d the duration + * @param pattern begin of the formatting pattern + * @param pat_end end of the formatting pattern + * + * @Effects Steps through the sequence from @c pattern to @c pat_end, + * identifying characters that are part of a pattern sequence. Each character + * that is not part of a pattern sequence is written to @c s immediately, and + * each pattern sequence, as it is identified, results in a call to + * @c put_value or @c put_unit; + * thus, pattern elements and other characters are interleaved in the output + * in the order in which they appear in the pattern. Pattern sequences are + * identified by converting each character @c c to a @c char value as if by + * @c ct.narrow(c,0), where @c ct is a reference to @c ctype obtained from + * @c ios.getloc(). The first character of each sequence is equal to @c '%', + * followed by a pattern specifier character @c spec, which can be @c 'v' for + * the duration value or @c 'u' for the duration unit. . + * For each valid pattern sequence identified, calls + * put_value(s, ios, fill, d) or put_unit(s, ios, fill, d). + * + * @Returns An iterator pointing immediately after the last character produced. + */ + template + iter_type put(iter_type s, std::ios_base& ios, char_type fill, duration const& d, const CharT* pattern, + const CharT* pat_end) const + { + if (std::has_facet >(ios.getloc())) + { + duration_units const&facet = std::use_facet >( + ios.getloc()); + return put(facet, s, ios, fill, d, pattern, pat_end); + } + else + { + duration_units_default facet; + return put(facet, s, ios, fill, d, pattern, pat_end); + } + } + + template + iter_type put(duration_units const& units_facet, iter_type s, std::ios_base& ios, char_type fill, + duration const& d, const CharT* pattern, const CharT* pat_end) const + { + + const std::ctype& ct = std::use_facet >(ios.getloc()); + for (; pattern != pat_end; ++pattern) + { + if (ct.narrow(*pattern, 0) == '%') + { + if (++pattern == pat_end) + { + *s++ = pattern[-1]; + break; + } + char fmt = ct.narrow(*pattern, 0); + switch (fmt) + { + case 'v': + { + s = put_value(s, ios, fill, d); + break; + } + case 'u': + { + s = put_unit(units_facet, s, ios, fill, d); + break; + } + default: + BOOST_ASSERT(false && "Boost::Chrono internal error."); + break; + } + } + else + *s++ = *pattern; + } + return s; + } + + /** + * + * @param s an output stream iterator + * @param ios a reference to a ios_base + * @param fill the character used as filler + * @param d the duration + * @Effects imbue in @c ios the @c duration_units_default facet if not already present. + * Retrieves Stores the duration pattern from the @c duration_unit facet in let say @c str. Last as if + * @code + * return put(s, ios, d, str.data(), str.data() + str.size()); + * @endcode + * @Returns An iterator pointing immediately after the last character produced. + */ + template + iter_type put(iter_type s, std::ios_base& ios, char_type fill, duration const& d) const + { + if (std::has_facet >(ios.getloc())) + { + duration_units const&facet = std::use_facet >( + ios.getloc()); + std::basic_string str = facet.get_pattern(); + return put(facet, s, ios, fill, d, str.data(), str.data() + str.size()); + } + else + { + duration_units_default facet; + std::basic_string str = facet.get_pattern(); + return put(facet, s, ios, fill, d, str.data(), str.data() + str.size()); + } + } + + /** + * + * @param s an output stream iterator + * @param ios a reference to a ios_base + * @param fill the character used as filler + * @param d the duration + * @Effects As if s=std::use_facet >(ios.getloc()).put(s, ios, fill, static_cast (d.count())). + * @Returns s, iterator pointing immediately after the last character produced. + */ + template + iter_type put_value(iter_type s, std::ios_base& ios, char_type fill, duration const& d) const + { + return std::use_facet >(ios.getloc()).put(s, ios, fill, + static_cast (d.count())); + } + + /** + * + * @param s an output stream iterator + * @param ios a reference to a ios_base + * @param fill the character used as filler + * @param d the duration + * @Effects Let facet be the duration_units facet associated to ios. If the associated unit is named, + * as if + * @code + string_type str = facet.get_unit(get_duration_style(ios), d); + s=std::copy(str.begin(), str.end(), s); + * @endcode + * Otherwise, format the unit as "[Period::num/Period::den]" followed by the unit associated to [N/D] obtained using facet.get_n_d_unit(get_duration_style(ios), d) + * @Returns s, iterator pointing immediately after the last character produced. + */ + template + iter_type put_unit(iter_type s, std::ios_base& ios, char_type fill, duration const& d) const + { + if (std::has_facet >(ios.getloc())) + { + duration_units const&facet = std::use_facet >( + ios.getloc()); + return put_unit(facet, s, ios, fill, d); + } + else + { + duration_units_default facet; + return put_unit(facet, s, ios, fill, d); + } + } + + template + iter_type put_unit(duration_units const& facet, iter_type s, std::ios_base& ios, char_type fill, + duration const& d) const + { + if (facet.template is_named_unit()) { + string_type str = facet.get_unit(get_duration_style(ios), d); + s=std::copy(str.begin(), str.end(), s); + } else { + *s++ = CharT('['); + std::use_facet >(ios.getloc()).put(s, ios, fill, Period::num); + *s++ = CharT('/'); + std::use_facet >(ios.getloc()).put(s, ios, fill, Period::den); + *s++ = CharT(']'); + string_type str = facet.get_n_d_unit(get_duration_style(ios), d); + s=std::copy(str.begin(), str.end(), s); + } + return s; + } + + /** + * Unique identifier for this type of facet. + */ + static std::locale::id id; + + /** + * @Effects Destroy the facet + */ + ~duration_put() + { + } + + }; + + template + std::locale::id duration_put::id; + + } // chrono +} // boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/duration_style.hpp b/3party/boost/boost/chrono/io/duration_style.hpp new file mode 100644 index 0000000000..65b76a902c --- /dev/null +++ b/3party/boost/boost/chrono/io/duration_style.hpp @@ -0,0 +1,35 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// This code was adapted by Vicente from Howard Hinnant's experimental work +// on chrono i/o to Boost + +#ifndef BOOST_CHRONO_IO_DURATION_STYLE_HPP +#define BOOST_CHRONO_IO_DURATION_STYLE_HPP + +#include + +namespace boost +{ + namespace chrono + { + /** + * Scoped enumeration emulation stating whether the duration I/O style is long or short. + * prefix means duration::rep with whatever stream/locale settings are set for it followed by a long name representing the unit + * symbol means duration::rep with whatever stream/locale settings are set for it followed by a SI unit abbreviation + */ + BOOST_SCOPED_ENUM_DECLARE_BEGIN(duration_style) + { + prefix, symbol + } + BOOST_SCOPED_ENUM_DECLARE_END(duration_style) + + + } // chrono + +} + +#endif // header diff --git a/3party/boost/boost/chrono/io/duration_units.hpp b/3party/boost/boost/chrono/io/duration_units.hpp new file mode 100644 index 0000000000..e2f1ba0906 --- /dev/null +++ b/3party/boost/boost/chrono/io/duration_units.hpp @@ -0,0 +1,992 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// + +#ifndef BOOST_CHRONO_IO_DURATION_UNITS_HPP +#define BOOST_CHRONO_IO_DURATION_UNITS_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost +{ + namespace chrono + { + class rt_ratio + { + public: + template + rt_ratio(Period const&) : + num(Period::type::num), den(Period::type::den) + { + } + + rt_ratio(intmax_t n = 0, intmax_t d = 0) : + num(n), den(d) + { + } + + intmax_t num; + intmax_t den; + }; + + /** + * @c duration_units facet gives useful information about the duration units, + * as the number of plural forms, the plural form associated to a duration, + * the text associated to a plural form and a duration's period, + */ + template + class duration_units: public std::locale::facet + { + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of character string passed to member functions. + */ + typedef std::basic_string string_type; + + /** + * Unique identifier for this type of facet. + */ + static std::locale::id id; + + /** + * Construct a @c duration_units facet. + * @param refs + * @Effects Construct a @c duration_units facet. + * If the @c refs argument is @c 0 then destruction of the object is + * delegated to the @c locale, or locales, containing it. This allows + * the user to ignore lifetime management issues. On the other had, + * if @c refs is @c 1 then the object must be explicitly deleted; + * the @c locale will not do so. In this case, the object can be + * maintained across the lifetime of multiple locales. + */ + explicit duration_units(size_t refs = 0) : + std::locale::facet(refs) + { + } + + /** + * @return pointer to the start of valid [N/D] units. + */ + virtual const string_type* get_n_d_valid_units_start() const =0; + /** + * @effect calls the do_... + * @return pointer to the end of valid [N/D] units. + */ + virtual const string_type* get_n_d_valid_units_end() const=0; + + /** + * @return pointer to the start of valid units, symbol or prefix with its different plural forms. + */ + virtual const string_type* get_valid_units_start() const=0; + /** + * @return pointer to the end of valid units. + */ + virtual const string_type* get_valid_units_end() const=0; + + /** + * @param k the found pointer to the [N/D] unit. + * @return true if @c k matches a valid unit. + */ + virtual bool match_n_d_valid_unit(const string_type* k) const = 0; + /** + * @param k the found pointer to the unit. + * @Effects @c rt is set to the valid Period when the @c k matches a valid unit. + * @return true if @c k matches a valid unit. + */ + virtual bool match_valid_unit(const string_type* k, rt_ratio& rt) const = 0; + + /** + * @effect calls the do_... + * @return the pattern to be used by default. + */ + virtual string_type get_pattern() const=0; + + /** + * @effect calls the do_... + * @return the unit associated to this duration. + */ + template + string_type get_unit(duration_style style, duration const& d) const + { + return do_get_unit(style, rt_ratio(Period()), static_cast(d.count())); + } + /** + * @effect calls the do_... + * @return the [N/D] suffix unit associated to this duration. + */ + template + string_type get_n_d_unit(duration_style style, duration const& d) const + { + return do_get_n_d_unit(style, rt_ratio(Period()), static_cast(d.count())); + } + + /** + * @effect calls the do_... + * @return true if the unit associated to the given Period is named, false otherwise. + */ + template + bool is_named_unit() const + { + return do_is_named_unit(rt_ratio(Period())); + } + + + protected: + + /** + * @Effects Destroys the facet + */ + virtual ~duration_units() + { + } + /** + * @return the [N/D] suffix unit associated to this duration. + */ + virtual string_type do_get_n_d_unit(duration_style style, rt_ratio rt, intmax_t v) const = 0; + /** + * @return the unit associated to this duration. + */ + virtual string_type do_get_unit(duration_style style,rt_ratio rt, intmax_t v) const = 0; + /** + * @return true if the unit associated to the given Period is named, false otherwise. + */ + virtual bool do_is_named_unit(rt_ratio rt) const =0; + + }; + + template + std::locale::id duration_units::id; + + namespace detail + { + template + struct duration_units_default_holder + { + typedef std::basic_string string_type; + static string_type* n_d_valid_units_; + static string_type* valid_units_; + static bool initialized_; + }; + template + typename duration_units_default_holder::string_type* duration_units_default_holder::n_d_valid_units_=0; + template + typename duration_units_default_holder::string_type* duration_units_default_holder::valid_units_=0; + template + bool duration_units_default_holder::initialized_ = false; + } + + /** + * This class is used to define the strings for the default English + */ + template + class duration_units_default: public duration_units + { + protected: + static const std::size_t pfs_ = 2; + + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of character string passed to member functions. + */ + typedef std::basic_string string_type; + + /** + * Construct a @c duration_units_default facet. + * @param refs + * @Effects Construct a @c duration_units_default facet. + * If the @c refs argument is @c 0 then destruction of the object is + * delegated to the @c locale, or locales, containing it. This allows + * the user to ignore lifetime management issues. On the other had, + * if @c refs is @c 1 then the object must be explicitly deleted; + * the @c locale will not do so. In this case, the object can be + * maintained across the lifetime of multiple locales. + */ + explicit duration_units_default(size_t refs = 0) : + duration_units (refs) + { + } + + /** + * Destroys the facet. + */ + ~duration_units_default() + { + } + + public: + + /** + * @param k the found pointer to the [N/D] unit. + * @return true if @c k matches a valid unit. + */ + bool match_n_d_valid_unit(const string_type* k) const + { + std::size_t index = (k - get_n_d_valid_units_start()) / (pfs_ + 1); + switch (index) + { + case 0: + break; + default: + return false; + } + return true; + } + /** + * @param k the found pointer to the unit. + * @Effects @c rt is set to the valid Period when the @c k matches a valid unit. + * @return true if @c k matches a valid unit. + */ + bool match_valid_unit(const string_type* k, rt_ratio& rt) const + { + std::size_t index = (k - get_valid_units_start()) / (pfs_ + 1); + switch (index) + { + case 0: + rt = rt_ratio(atto()); + break; + case 1: + rt = rt_ratio(femto()); + break; + case 2: + rt = rt_ratio(pico()); + break; + case 3: + rt = rt_ratio(nano()); + break; + case 4: + rt = rt_ratio(micro()); + break; + case 5: + rt = rt_ratio(milli()); + break; + case 6: + rt = rt_ratio(centi()); + break; + case 7: + rt = rt_ratio(deci()); + break; + case 8: + rt = rt_ratio(deca()); + break; + case 9: + rt = rt_ratio(hecto()); + break; + case 10: + rt = rt_ratio(kilo()); + break; + case 11: + rt = rt_ratio(mega()); + break; + case 12: + rt = rt_ratio(giga()); + break; + case 13: + rt = rt_ratio(tera()); + break; + case 14: + rt = rt_ratio(peta()); + break; + case 15: + rt = rt_ratio(exa()); + break; + case 16: + rt = rt_ratio(ratio<1> ()); + break; + case 17: + rt = rt_ratio(ratio<60> ()); + break; + case 18: + rt = rt_ratio(ratio<3600> ()); + break; + default: + return false; + } + return true; + } + + /** + * @return pointer to the start of valid [N/D] units. + */ + virtual const string_type* get_n_d_valid_units_start()const + { + return detail::duration_units_default_holder::n_d_valid_units_; + } + /** + * @return pointer to the end of valid [N/D] units. + */ + virtual const string_type* get_n_d_valid_units_end()const + { + return detail::duration_units_default_holder::n_d_valid_units_ + (pfs_ + 1); + } + + /** + * @return pointer to the start of valid units. + */ + virtual string_type* get_valid_units_start() const + { + return detail::duration_units_default_holder::valid_units_; + } + /** + * @return pointer to the end of valid units. + */ + virtual string_type* get_valid_units_end() const + { + return detail::duration_units_default_holder::valid_units_ + 19 * (pfs_ + 1); + } + + string_type get_pattern() const + { + static const CharT t[] = + { '%', 'v', ' ', '%', 'u' }; + static const string_type pattern(t, t + sizeof (t) / sizeof (t[0])); + + return pattern; + } + + protected: + /** + * + * This facet names the units associated to the following periods: + * atto,femto,pico,nano,micro,milli,centi,deci,ratio<1>,deca,hecto,kilo,mega,giga,tera,peta,exa,ratio<60> and ratio<3600>. + * @return true if the unit associated to the given Period is named, false otherwise. + */ + bool do_is_named_unit(rt_ratio rt) const + { + if (rt.num==1) { + switch (rt.den) + { + case BOOST_RATIO_INTMAX_C(1): + case BOOST_RATIO_INTMAX_C(10): + case BOOST_RATIO_INTMAX_C(100): + case BOOST_RATIO_INTMAX_C(1000): + case BOOST_RATIO_INTMAX_C(1000000): + case BOOST_RATIO_INTMAX_C(1000000000): + case BOOST_RATIO_INTMAX_C(1000000000000): + case BOOST_RATIO_INTMAX_C(1000000000000000): + case BOOST_RATIO_INTMAX_C(1000000000000000000): + return true; + default: + return false; + } + } else if (rt.den==1) { + switch (rt.num) + { + case BOOST_RATIO_INTMAX_C(10): + case BOOST_RATIO_INTMAX_C(60): + case BOOST_RATIO_INTMAX_C(100): + case BOOST_RATIO_INTMAX_C(1000): + case BOOST_RATIO_INTMAX_C(3600): + case BOOST_RATIO_INTMAX_C(1000000): + case BOOST_RATIO_INTMAX_C(1000000000): + case BOOST_RATIO_INTMAX_C(1000000000000): + case BOOST_RATIO_INTMAX_C(1000000000000000): + case BOOST_RATIO_INTMAX_C(1000000000000000000): + return true; + default: + return false; + } + } + return false; + + } + + /** + * In English the suffix used after [N/D] is the one associated to the period ratio<1>. + * @return the [N/D] suffix unit associated to this duration. + */ + string_type do_get_n_d_unit(duration_style style, rt_ratio, intmax_t v) const + { + return do_get_unit(style, ratio<1>(), do_get_plural_form(v)); + } + + /** + * @return the unit associated to this duration if it is named, "" otherwise. + */ + string_type do_get_unit(duration_style style, rt_ratio rt, intmax_t v) const + { + if (rt.num==1) { + switch (rt.den) + { + case BOOST_RATIO_INTMAX_C(1): + return do_get_unit(style, ratio<1>(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(10): + return do_get_unit(style, deci(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(100): + return do_get_unit(style, centi(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000): + return do_get_unit(style, milli(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000): + return do_get_unit(style, micro(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000): + return do_get_unit(style, nano(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000000): + return do_get_unit(style, pico(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000000000): + return do_get_unit(style, femto(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000000000000): + return do_get_unit(style, atto(), do_get_plural_form(v)); + default: + ; + } + } else if (rt.den==1) { + switch (rt.num) + { + case BOOST_RATIO_INTMAX_C(10): + return do_get_unit(style, deca(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(60): + return do_get_unit(style, ratio<60>(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(100): + return do_get_unit(style, hecto(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000): + return do_get_unit(style, kilo(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(3600): + return do_get_unit(style, ratio<3600>(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000): + return do_get_unit(style, mega(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000): + return do_get_unit(style, giga(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000000): + return do_get_unit(style, tera(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000000000): + return do_get_unit(style, peta(), do_get_plural_form(v)); + case BOOST_RATIO_INTMAX_C(1000000000000000000): + return do_get_unit(style, exa(), do_get_plural_form(v)); + default: + ; + } + } + BOOST_ASSERT(false&&"ratio parameter can not be translated"); + //throw "exception"; + return string_type(); + } + + protected: + /** + * @return the number of associated plural forms this facet manages. + */ + virtual std::size_t do_get_plural_forms() const + { + return static_get_plural_forms(); + } + static std::size_t static_get_plural_forms() + { + return pfs_; + } + /** + * Gets the associated plural form. + * @param value the duration representation + * @return the plural form associated to the @c value parameter. In English there are 2 plural forms + * 0 singular (-1 or 1) + * 1 plural for all others + */ + virtual std::size_t do_get_plural_form(int_least64_t value) const + { + return static_get_plural_form(value); + } + static std::size_t static_get_plural_form(int_least64_t value) + { + return (value == -1 || value == 1) ? 0 : 1; + } + + /** + * @param style the duration style. + * @param period the period associated to the duration seconds. + * @param pf the requested plural form. + * @return if style is symbol returns "s", otherwise if pf is 0 return "second", if pf is 1 "seconds" + */ + virtual string_type do_get_unit(duration_style style, ratio<1> u, std::size_t pf) const + { + return static_get_unit(style,u,pf); + } + static string_type static_get_unit(duration_style style, ratio<1> , std::size_t pf) + { + static const CharT t[] = + { 's' }; + static const string_type symbol(t, t + sizeof (t) / sizeof (t[0])); + static const CharT u[] = + { 's', 'e', 'c', 'o', 'n', 'd' }; + static const string_type singular(u, u + sizeof (u) / sizeof (u[0])); + static const CharT v[] = + { 's', 'e', 'c', 'o', 'n', 'd', 's' }; + static const string_type plural(v, v + sizeof (v) / sizeof (v[0])); + + if (style == duration_style::symbol) + { + return symbol; + } + if (pf == 0) + { + return singular; + } + if (pf == 1) + { + return plural; + } + BOOST_ASSERT(false&&"style/pf parameters not valid"); + //throw "exception"; + return string_type(); + } + + /** + * @param style the duration style. + * @param period the period associated to the duration minutes. + * @param pf the requested plural form. + * @return if style is symbol returns "min", otherwise if pf is 0 return "minute", if pf is 1 "minutes" + */ + virtual string_type do_get_unit(duration_style style, ratio<60> u, std::size_t pf) const + { + return static_get_unit(style,u,pf); + } + static string_type static_get_unit(duration_style style, ratio<60> , std::size_t pf) + { + static const CharT t[] = + { 'm', 'i', 'n' }; + static const string_type symbol(t, t + sizeof (t) / sizeof (t[0])); + + static const CharT u[] = + { 'm', 'i', 'n', 'u', 't', 'e' }; + static const string_type singular(u, u + sizeof (u) / sizeof (u[0])); + static const CharT v[] = + { 'm', 'i', 'n', 'u', 't', 'e', 's' }; + static const string_type plural(v, v + sizeof (v) / sizeof (v[0])); + + if (style == duration_style::symbol) return symbol; + if (pf == 0) return singular; + if (pf == 1) return plural; + BOOST_ASSERT(false&&"style/pf parameters not valid"); + //throw "exception"; + return string_type(); + + } + + /** + * @param style the duration style. + * @param period the period associated to the duration hours. + * @param pf the requested plural form. + * @return if style is symbol returns "h", otherwise if pf is 0 return "hour", if pf is 1 "hours" + */ + virtual string_type do_get_unit(duration_style style, ratio<3600> u, std::size_t pf) const + { + return static_get_unit(style,u,pf); + } + static string_type static_get_unit(duration_style style, ratio<3600> , std::size_t pf) + { + static const CharT t[] = + { 'h' }; + static const string_type symbol(t, t + sizeof (t) / sizeof (t[0])); + static const CharT u[] = + { 'h', 'o', 'u', 'r' }; + static const string_type singular(u, u + sizeof (u) / sizeof (u[0])); + static const CharT v[] = + { 'h', 'o', 'u', 'r', 's' }; + static const string_type plural(v, v + sizeof (v) / sizeof (v[0])); + + if (style == duration_style::symbol) return symbol; + if (pf == 0) return singular; + if (pf == 1) return plural; + BOOST_ASSERT(false&&"style/pf parameters not valid"); + //throw "exception"; + return string_type(); + + } + /** + * @param style the duration style. + * @param u the period tag atto. + * @param pf the requested plural form. + * @return the concatenation of the prefix associated to @c period + the one associated to seconds. + */ + virtual string_type do_get_unit(duration_style style, atto u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, atto u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + /** + * @param style the duration style. + * @param u the period tag femto. + * @param pf the requested plural form. + * @return the concatenation of the prefix associated to period @c u + the one associated to seconds. + */ + virtual string_type do_get_unit(duration_style style, femto u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, femto u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + /** + * @param style the duration style. + * @param u the period tag femto. + * @param pf the requested plural form. + * @return the concatenation of the prefix associated to period @c u + the one associated to seconds. + */ + virtual string_type do_get_unit(duration_style style, pico u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, pico u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, nano u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, nano u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, micro u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, micro u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, milli u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, milli u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, centi u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, centi u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, deci u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, deci u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, deca u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, deca u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, hecto u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, hecto u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, kilo u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, kilo u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, mega u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, mega u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, giga u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, giga u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, tera u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, tera u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, peta u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, peta u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + virtual string_type do_get_unit(duration_style style, exa u, std::size_t pf) const + { + return do_get_ratio_prefix(style, u) + do_get_unit(style, ratio<1> (), pf); + } + static string_type static_get_unit(duration_style style, exa u, std::size_t pf) + { + return static_get_ratio_prefix(style, u) + static_get_unit(style, ratio<1> (), pf); + } + + protected: + + /** + * @param style the duration style. + * @param u the period tag atto. + * @return depending on the value of @c style return the ratio_string symbol or prefix. + */ + virtual string_type do_get_ratio_prefix(duration_style style, atto u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, atto) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, femto u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, femto) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, pico u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, pico) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, nano u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, nano) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, micro u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, micro) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, milli u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, milli) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, centi u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, centi) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, deci u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, deci) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, deca u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, deca) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, hecto u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, hecto) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, kilo u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, kilo) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, mega u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, mega) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, giga u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, giga) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, tera u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, tera) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, peta u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, peta) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + virtual string_type do_get_ratio_prefix(duration_style style, exa u) const + { + return static_get_ratio_prefix(style, u); + } + static string_type static_get_ratio_prefix(duration_style style, exa) + { + if (style == duration_style::symbol) return ratio_string::symbol(); + return ratio_string::prefix(); + } + + protected: + template + string_type* fill_units(string_type* it, Period) const + { + std::size_t pfs = do_get_plural_forms(); + for (std::size_t pf = 0; pf < pfs; ++pf) + { + *it++ = do_get_unit(duration_style::prefix, Period(), pf); + } + *it++ = do_get_unit(duration_style::symbol, Period(), 0); + return it; + } + public: + template + static string_type* static_fill_units(string_type* it, Period) + { + std::size_t pfs = static_get_plural_forms(); + for (std::size_t pf = 0; pf < pfs; ++pf) + { + *it++ = static_get_unit(duration_style::prefix, Period(), pf); + } + *it++ = static_get_unit(duration_style::symbol, Period(), 0); + return it; + } + static string_type* static_init_valid_units(string_type* it) + { + it = static_fill_units(it, atto()); + it = static_fill_units(it, femto()); + it = static_fill_units(it, pico()); + it = static_fill_units(it, nano()); + it = static_fill_units(it, micro()); + it = static_fill_units(it, milli()); + it = static_fill_units(it, centi()); + it = static_fill_units(it, deci()); + it = static_fill_units(it, deca()); + it = static_fill_units(it, hecto()); + it = static_fill_units(it, kilo()); + it = static_fill_units(it, mega()); + it = static_fill_units(it, giga()); + it = static_fill_units(it, tera()); + it = static_fill_units(it, peta()); + it = static_fill_units(it, exa()); + it = static_fill_units(it, ratio<1> ()); + it = static_fill_units(it, ratio<60> ()); + it = static_fill_units(it, ratio<3600> ()); + return it; + } + }; + + namespace detail + { + + template + struct duration_units_default_initializer_t + { + duration_units_default_initializer_t() + { + if (!duration_units_default_holder::initialized_) + { + typedef typename duration_units_default_holder::string_type string_type; + duration_units_default_holder::n_d_valid_units_ = new string_type[3]; + duration_units_default_holder::valid_units_ = new string_type[19 * 3]; + + string_type* it = duration_units_default_holder::n_d_valid_units_; + it = duration_units_default::static_fill_units(it, ratio<1> ()); + it = duration_units_default::static_init_valid_units(duration_units_default_holder::valid_units_); + + duration_units_default_holder::initialized_ = true; + } + } + }; + namespace /**/ + { + duration_units_default_initializer_t duration_units_default_initializer; + duration_units_default_initializer_t wduration_units_default_initializer; + } // namespace + } + } // chrono + +} // boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/ios_base_state.hpp b/3party/boost/boost/chrono/io/ios_base_state.hpp new file mode 100644 index 0000000000..9bbe73733b --- /dev/null +++ b/3party/boost/boost/chrono/io/ios_base_state.hpp @@ -0,0 +1,150 @@ +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// This code was adapted by Vicente from Howard Hinnant's experimental work +// on chrono i/o to Boost + +#ifndef BOOST_CHRONO_IO_IOS_BASE_STATE_HPP +#define BOOST_CHRONO_IO_IOS_BASE_STATE_HPP + +#include +#include +#include +#include +#include + +namespace boost +{ + namespace chrono + { + + class fmt_masks : public ios_flags + { + typedef ios_flags base_type; + + public: + fmt_masks(std::ios_base& ios): base_type(ios) {} + enum type + { + uses_symbol = 1 << 0, + uses_local = 1 << 1 + }; + + inline duration_style get_duration_style() + { + return (flags() & uses_symbol) ? duration_style::symbol : duration_style::prefix; + } + inline void set_duration_style(duration_style style) + { + if (style == duration_style::symbol) + setf(uses_symbol); + else + unsetf(uses_symbol); + } + + inline timezone get_timezone() + { + return (flags() & uses_local) ? timezone::local : timezone::utc; + } + inline void set_timezone(timezone tz) + { + if (tz == timezone::local) + setf(uses_local); + else + unsetf(uses_local); + } + }; + namespace detail + { + namespace /**/ { + xalloc_key_initializer fmt_masks_xalloc_key_initializer; + } // namespace + } // namespace detail + + inline duration_style get_duration_style(std::ios_base & ios) + { + return fmt_masks(ios).get_duration_style(); + } + inline void set_duration_style(std::ios_base& ios, duration_style style) + { + fmt_masks(ios).set_duration_style(style); + } + inline std::ios_base& symbol_format(std::ios_base& ios) + { + fmt_masks(ios).setf(fmt_masks::uses_symbol); + return ios; + } + inline std::ios_base& name_format(std::ios_base& ios) + { + fmt_masks(ios).unsetf(fmt_masks::uses_symbol); + return ios; + } + + inline timezone get_timezone(std::ios_base & ios) + { + return fmt_masks(ios).get_timezone(); + } + inline void set_timezone(std::ios_base& ios, timezone tz) + { + fmt_masks(ios).set_timezone(tz); + } + inline std::ios_base& local_timezone(std::ios_base& ios) + { + fmt_masks(ios).setf(fmt_masks::uses_local); + return ios; + } + + inline std::ios_base& utc_timezone(std::ios_base& ios) + { + fmt_masks(ios).unsetf(fmt_masks::uses_local); + return ios; + } + + namespace detail + { + + template + struct ios_base_data_aux + { + std::basic_string time_fmt; + std::basic_string duration_fmt; + public: + + ios_base_data_aux() : + time_fmt(""), + duration_fmt("") + { + } + }; + template + struct ios_base_data {}; + namespace /**/ { + xalloc_key_initializer > ios_base_data_aux_xalloc_key_initializer; + xalloc_key_initializer > wios_base_data_aux_xalloc_key_initializer; +#if BOOST_CHRONO_HAS_UNICODE_SUPPORT + xalloc_key_initializer > u16ios_base_data_aux_xalloc_key_initializer; + xalloc_key_initializer > u32ios_base_data_aux_xalloc_key_initializer; +#endif + } // namespace + } // namespace detail + + template + inline std::basic_string get_time_fmt(std::ios_base & ios) + { + ios_state_not_null_ptr, detail::ios_base_data_aux > ptr(ios); + return ptr->time_fmt; + } + template + inline void set_time_fmt(std::ios_base& ios, std::basic_string< + CharT> const& fmt) + { + ios_state_not_null_ptr, detail::ios_base_data_aux > ptr(ios); + ptr->time_fmt = fmt; + } + + } // chrono +} // boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/time_point_get.hpp b/3party/boost/boost/chrono/io/time_point_get.hpp new file mode 100644 index 0000000000..117d410712 --- /dev/null +++ b/3party/boost/boost/chrono/io/time_point_get.hpp @@ -0,0 +1,333 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// + +#ifndef BOOST_CHRONO_IO_TIME_POINT_GET_HPP +#define BOOST_CHRONO_IO_TIME_POINT_GET_HPP + +#include +#include +#include +#include +#include +#include +#include + +/** + * Duration formatting facet for input. + */ +namespace boost +{ + namespace chrono + { + + template > + class time_point_get: public std::locale::facet + { + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of iterator used to scan the character buffer. + */ + typedef InputIterator iter_type; + + /** + * Construct a @c time_point_get facet. + * @param refs + * @Effects Construct a @c time_point_get facet. + * If the @c refs argument is @c 0 then destruction of the object is + * delegated to the @c locale, or locales, containing it. This allows + * the user to ignore lifetime management issues. On the other had, + * if @c refs is @c 1 then the object must be explicitly deleted; + * the @c locale will not do so. In this case, the object can be + * maintained across the lifetime of multiple locales. + */ + + explicit time_point_get(size_t refs = 0) : + std::locale::facet(refs) + { + } + + /** + * @param s start input stream iterator + * @param end end input stream iterator + * @param ios a reference to a ios_base + * @param err the ios_base state + * @param d the duration + * @param pattern begin of the formatting pattern + * @param pat_end end of the formatting pattern + * + * Requires: [pattern,pat_end) shall be a valid range. + * + * Effects: The function starts by evaluating err = std::ios_base::goodbit. + * It then enters a loop, reading zero or more characters from s at + * each iteration. Unless otherwise specified below, the loop + * terminates when the first of the following conditions holds: + * - The expression pattern == pat_end evaluates to true. + * - The expression err == std::ios_base::goodbit evaluates to false. + * - The expression s == end evaluates to true, in which case the + * function evaluates err = std::ios_base::eofbit | std::ios_base::failbit. + * - The next element of pattern is equal to '%', followed by a conversion + * specifier character, the functions @c get_duration or @c get_epoch are called depending on + * whether the format is @c 'd' or @c 'e'. + * If the number of elements in the range [pattern,pat_end) is not + * sufficient to unambiguously determine whether the conversion + * specification is complete and valid, the function evaluates + * err = std::ios_base::failbit. Otherwise, the function evaluates + * s = do_get(s, end, ios, err, d). If err == std::ios_base::goodbit holds after + * the evaluation of the expression, the function increments pattern to + * point just past the end of the conversion specification and continues + * looping. + * - The expression isspace(*pattern, ios.getloc()) evaluates to true, in + * which case the function first increments pattern until + * pattern == pat_end || !isspace(*pattern, ios.getloc()) evaluates to true, + * then advances s until s == end || !isspace(*s, ios.getloc()) is true, + * and finally resumes looping. + * - The next character read from s matches the element pointed to by + * pattern in a case-insensitive comparison, in which case the function + * evaluates ++pattern, ++s and continues looping. Otherwise, the function + * evaluates err = std::ios_base::failbit. + * + * Returns: s + */ + + template + iter_type get(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, + time_point &tp, const char_type *pattern, const char_type *pat_end) const + { + if (std::has_facet >(is.getloc())) + { + time_point_units const &facet = std::use_facet >(is.getloc()); + return get(facet, i, e, is, err, tp, pattern, pat_end); + } + else + { + time_point_units_default facet; + return get(facet, i, e, is, err, tp, pattern, pat_end); + } + } + + template + iter_type get(time_point_units const &facet, iter_type s, iter_type end, std::ios_base& ios, + std::ios_base::iostate& err, time_point &tp, const char_type *pattern, + const char_type *pat_end) const + { + + Duration d; + bool duration_found = false, epoch_found = false; + + const std::ctype& ct = std::use_facet >(ios.getloc()); + err = std::ios_base::goodbit; + while (pattern != pat_end && err == std::ios_base::goodbit) + { + //std::cerr << __FILE__ << ":" << __LINE__ << " err " << err << std::endl; + if (s == end) + { + err |= std::ios_base::eofbit; + break; + } + if (ct.narrow(*pattern, 0) == '%') + { + if (++pattern == pat_end) + { + err |= std::ios_base::failbit; + return s; + } + char cmd = ct.narrow(*pattern, 0); + switch (cmd) + { + case 'd': + { + if (duration_found) + { + err |= std::ios_base::failbit; + return s; + } + duration_found = true; + s = get_duration(s, end, ios, err, d); + //std::cerr << __FILE__ << ":" << __LINE__ << " err " << err << std::endl; + if (err & (std::ios_base::badbit | std::ios_base::failbit)) + { + return s; + } + break; + } + case 'e': + { + if (epoch_found) + { + err |= std::ios_base::failbit; + return s; + } + epoch_found = true; + s = get_epoch (facet, s, end, ios, err); + //std::cerr << __FILE__ << ":" << __LINE__ << " err " << err << std::endl; + if (err & (std::ios_base::badbit | std::ios_base::failbit)) + { + return s; + } + break; + } + default: + BOOST_ASSERT(false && "Boost::Chrono internal error."); + break; + } + + ++pattern; + } + else if (ct.is(std::ctype_base::space, *pattern)) + { + for (++pattern; pattern != pat_end && ct.is(std::ctype_base::space, *pattern); ++pattern) + ; + for (; s != end && ct.is(std::ctype_base::space, *s); ++s) + ; + } + else if (ct.toupper(*s) == ct.toupper(*pattern)) + { + ++s; + ++pattern; + } + else + { + err |= std::ios_base::failbit; + } + } + + // Success! Store it. + tp = time_point (d); + return s; + } + + /** + * + * @param s an input stream iterator + * @param ios a reference to a ios_base + * @param d the duration + * Stores the duration pattern from the @c duration_unit facet in let say @c str. Last as if + * @code + * return get(s, end, ios, err, ios, d, str.data(), str.data() + str.size()); + * @codeend + * @Returns An iterator pointing just beyond the last character that can be determined to be part of a valid name + */ + template + iter_type get(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, + time_point &tp) const + { + if (std::has_facet >(is.getloc())) + { + time_point_units const &facet = std::use_facet >(is.getloc()); + std::basic_string str = facet.get_pattern(); + return get(facet, i, e, is, err, tp, str.data(), str.data() + str.size()); + } + else + { + time_point_units_default facet; + std::basic_string str = facet.get_pattern(); + return get(facet, i, e, is, err, tp, str.data(), str.data() + str.size()); + } + } + + /** + * As if + * @code + * return facet.get(s, end, ios, err, d); + * @endcode + * where @c facet is either the @c duration_get facet associated to the @c ios or an instance of the default @c duration_get facet. + * + * @Returns An iterator pointing just beyond the last character that can be determined to be part of a valid duration. + */ + template + iter_type get_duration(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err, + duration& d) const + { + if (std::has_facet >(is.getloc())) + { + duration_get const &facet = std::use_facet >(is.getloc()); + return get_duration(facet, i, e, is, err, d); + } + else + { + duration_get facet; + return get_duration(facet, i, e, is, err, d); + } + } + + template + iter_type get_duration(duration_get const& facet, iter_type s, iter_type end, std::ios_base& ios, + std::ios_base::iostate& err, duration& d) const + { + return facet.get(s, end, ios, err, d); + } + + /** + * + * @Effects Let @c facet be the @c time_point_units facet associated to @c is or a new instance of the default @c time_point_units_default facet. + * Let @c epoch be the epoch string associated to the Clock using this facet. + * Scans @c i to match @c epoch or @c e is reached. + * + * If not match before the @c e is reached @c std::ios_base::failbit is set in @c err. + * If @c e is reached @c std::ios_base::failbit is set in @c err. + * + * @Returns An iterator pointing just beyond the last character that can be determined to be part of a valid epoch. + */ + template + iter_type get_epoch(iter_type i, iter_type e, std::ios_base& is, std::ios_base::iostate& err) const + { + if (std::has_facet >(is.getloc())) + { + time_point_units const &facet = std::use_facet >(is.getloc()); + return get_epoch(facet, i, e, is, err); + } + else + { + time_point_units_default facet; + return get_epoch(facet, i, e, is, err); + } + } + + template + iter_type get_epoch(time_point_units const &facet, iter_type i, iter_type e, std::ios_base&, + std::ios_base::iostate& err) const + { + const std::basic_string epoch = facet.template get_epoch (); + std::ptrdiff_t k = chrono_detail::scan_keyword(i, e, &epoch, &epoch + 1, + //~ std::use_facet >(ios.getloc()), + err) - &epoch; + if (k == 1) + { + err |= std::ios_base::failbit; + return i; + } + return i; + } + + /** + * Unique identifier for this type of facet. + */ + static std::locale::id id; + + /** + * @Effects Destroy the facet + */ + ~time_point_get() + { + } + }; + + /** + * Unique identifier for this type of facet. + */ + template + std::locale::id time_point_get::id; + + } // chrono +} +// boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/time_point_io.hpp b/3party/boost/boost/chrono/io/time_point_io.hpp new file mode 100644 index 0000000000..df8689434f --- /dev/null +++ b/3party/boost/boost/chrono/io/time_point_io.hpp @@ -0,0 +1,1058 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2010-2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). + +//===-------------------------- locale ------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// This code was adapted by Vicente from Howard Hinnant's experimental work +// on chrono i/o to Boost and some functions from libc++/locale to emulate the missing time_get::get() + +#ifndef BOOST_CHRONO_IO_TIME_POINT_IO_HPP +#define BOOST_CHRONO_IO_TIME_POINT_IO_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define BOOST_CHRONO_INTERNAL_TIMEGM defined BOOST_WINDOWS && ! defined(__CYGWIN__) +//#define BOOST_CHRONO_INTERNAL_TIMEGM 1 + +#define BOOST_CHRONO_USES_INTERNAL_TIME_GET + +namespace boost +{ + namespace chrono + { + namespace detail + { + + template > + struct time_get + { + std::time_get const &that_; + time_get(std::time_get const& that) : that_(that) {} + + typedef std::time_get facet; + typedef typename facet::iter_type iter_type; + typedef typename facet::char_type char_type; + typedef std::basic_string string_type; + + static int + get_up_to_n_digits( + InputIterator& b, InputIterator e, + std::ios_base::iostate& err, + const std::ctype& ct, + int n) + { + // Precondition: n >= 1 + if (b == e) + { + err |= std::ios_base::eofbit | std::ios_base::failbit; + return 0; + } + // get first digit + CharT c = *b; + if (!ct.is(std::ctype_base::digit, c)) + { + err |= std::ios_base::failbit; + return 0; + } + int r = ct.narrow(c, 0) - '0'; + for (++b, --n; b != e && n > 0; ++b, --n) + { + // get next digit + c = *b; + if (!ct.is(std::ctype_base::digit, c)) + return r; + r = r * 10 + ct.narrow(c, 0) - '0'; + } + if (b == e) + err |= std::ios_base::eofbit; + return r; + } + + + void get_day( + int& d, + iter_type& b, iter_type e, + std::ios_base::iostate& err, + const std::ctype& ct) const + { + int t = get_up_to_n_digits(b, e, err, ct, 2); + if (!(err & std::ios_base::failbit) && 1 <= t && t <= 31) + d = t; + else + err |= std::ios_base::failbit; + } + + void get_month( + int& m, + iter_type& b, iter_type e, + std::ios_base::iostate& err, + const std::ctype& ct) const + { + int t = get_up_to_n_digits(b, e, err, ct, 2) - 1; + if (!(err & std::ios_base::failbit) && t <= 11) + m = t; + else + err |= std::ios_base::failbit; + } + + + void get_year4(int& y, + iter_type& b, iter_type e, + std::ios_base::iostate& err, + const std::ctype& ct) const + { + int t = get_up_to_n_digits(b, e, err, ct, 4); + if (!(err & std::ios_base::failbit)) + y = t - 1900; + } + + void + get_hour(int& h, + iter_type& b, iter_type e, + std::ios_base::iostate& err, + const std::ctype& ct) const + { + int t = get_up_to_n_digits(b, e, err, ct, 2); + if (!(err & std::ios_base::failbit) && t <= 23) + h = t; + else + err |= std::ios_base::failbit; + } + + void + get_minute(int& m, + iter_type& b, iter_type e, + std::ios_base::iostate& err, + const std::ctype& ct) const + { + int t = get_up_to_n_digits(b, e, err, ct, 2); + if (!(err & std::ios_base::failbit) && t <= 59) + m = t; + else + err |= std::ios_base::failbit; + } + + void + get_second(int& s, + iter_type& b, iter_type e, + std::ios_base::iostate& err, + const std::ctype& ct) const + { + int t = get_up_to_n_digits(b, e, err, ct, 2); + if (!(err & std::ios_base::failbit) && t <= 60) + s = t; + else + err |= std::ios_base::failbit; + } + + + + InputIterator get( + iter_type b, iter_type e, + std::ios_base& iob, + std::ios_base::iostate& err, + std::tm* tm, + char fmt, char) const + { + err = std::ios_base::goodbit; + const std::ctype& ct = std::use_facet >(iob.getloc()); + + switch (fmt) + { +// case 'a': +// case 'A': +// that_.get_weekdayname(tm->tm_wday, b, e, err, ct); +// break; +// case 'b': +// case 'B': +// case 'h': +// that_.get_monthname(tm->tm_mon, b, e, err, ct); +// break; +// case 'c': +// { +// const string_type& fm = this->c(); +// b = that_.get(b, e, iob, err, tm, fm.data(), fm.data() + fm.size()); +// } +// break; + case 'd': + case 'e': + get_day(tm->tm_mday, b, e, err, ct); + //std::cerr << "tm_mday= "<< tm->tm_mday << std::endl; + + break; +// case 'D': +// { +// const char_type fm[] = {'%', 'm', '/', '%', 'd', '/', '%', 'y'}; +// b = that_.get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0])); +// } +// break; +// case 'F': +// { +// const char_type fm[] = {'%', 'Y', '-', '%', 'm', '-', '%', 'd'}; +// b = that_.get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0])); +// } +// break; + case 'H': + get_hour(tm->tm_hour, b, e, err, ct); + //std::cerr << "tm_hour= "<< tm->tm_hour << std::endl; + break; +// case 'I': +// that_.get_12_hour(tm->tm_hour, b, e, err, ct); +// break; +// case 'j': +// that_.get_day_year_num(tm->tm_yday, b, e, err, ct); +// break; + case 'm': + get_month(tm->tm_mon, b, e, err, ct); + //std::cerr << "tm_mon= "<< tm->tm_mon << std::endl; + break; + case 'M': + get_minute(tm->tm_min, b, e, err, ct); + //std::cerr << "tm_min= "<< tm->tm_min << std::endl; + break; +// case 'n': +// case 't': +// that_.get_white_space(b, e, err, ct); +// break; +// case 'p': +// that_.get_am_pm(tm->tm_hour, b, e, err, ct); +// break; +// case 'r': +// { +// const char_type fm[] = {'%', 'I', ':', '%', 'M', ':', '%', 'S', ' ', '%', 'p'}; +// b = that_.get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0])); +// } +// break; +// case 'R': +// { +// const char_type fm[] = {'%', 'H', ':', '%', 'M'}; +// b = that_.get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0])); +// } +// break; +// case 'S': +// that_.get_second(tm->tm_sec, b, e, err, ct); +// break; +// case 'T': +// { +// const char_type fm[] = {'%', 'H', ':', '%', 'M', ':', '%', 'S'}; +// b = that_.get(b, e, iob, err, tm, fm, fm + sizeof(fm)/sizeof(fm[0])); +// } +// break; +// case 'w': +// that_.get_weekday(tm->tm_wday, b, e, err, ct); +// break; +// case 'x': +// return that_.get_date(b, e, iob, err, tm); +// case 'X': +// { +// const string_type& fm = this->X(); +// b = that_.get(b, e, iob, err, tm, fm.data(), fm.data() + fm.size()); +// } +// break; +// case 'y': +// that_.get_year(tm->tm_year, b, e, err, ct); + break; + case 'Y': + get_year4(tm->tm_year, b, e, err, ct); + //std::cerr << "tm_year= "<< tm->tm_year << std::endl; + break; +// case '%': +// that_.get_percent(b, e, err, ct); +// break; + default: + err |= std::ios_base::failbit; + } + return b; + } + + + InputIterator get( + iter_type b, iter_type e, + std::ios_base& iob, + std::ios_base::iostate& err, std::tm* tm, + const char_type* fmtb, const char_type* fmte) const + { + const std::ctype& ct = std::use_facet >(iob.getloc()); + err = std::ios_base::goodbit; + while (fmtb != fmte && err == std::ios_base::goodbit) + { + if (b == e) + { + err = std::ios_base::failbit; + break; + } + if (ct.narrow(*fmtb, 0) == '%') + { + if (++fmtb == fmte) + { + err = std::ios_base::failbit; + break; + } + char cmd = ct.narrow(*fmtb, 0); + char opt = '\0'; + if (cmd == 'E' || cmd == '0') + { + if (++fmtb == fmte) + { + err = std::ios_base::failbit; + break; + } + opt = cmd; + cmd = ct.narrow(*fmtb, 0); + } + b = get(b, e, iob, err, tm, cmd, opt); + ++fmtb; + } + else if (ct.is(std::ctype_base::space, *fmtb)) + { + for (++fmtb; fmtb != fmte && ct.is(std::ctype_base::space, *fmtb); ++fmtb) + ; + for ( ; b != e && ct.is(std::ctype_base::space, *b); ++b) + ; + } + else if (ct.toupper(*b) == ct.toupper(*fmtb)) + { + ++b; + ++fmtb; + } + else + err = std::ios_base::failbit; + } + if (b == e) + err |= std::ios_base::eofbit; + return b; + } + + }; + + + template + class time_manip: public manip > + { + std::basic_string fmt_; + timezone tz_; + public: + + time_manip(timezone tz, std::basic_string fmt) + // todo move semantics + : + fmt_(fmt), tz_(tz) + { + } + + /** + * Change the timezone and time format ios state; + */ + void operator()(std::ios_base &ios) const + { + set_time_fmt (ios, fmt_); + set_timezone(ios, tz_); + } + }; + + class time_man: public manip + { + timezone tz_; + public: + + time_man(timezone tz) + // todo move semantics + : + tz_(tz) + { + } + + /** + * Change the timezone and time format ios state; + */ + void operator()(std::ios_base &ios) const + { + //set_time_fmt(ios, ""); + set_timezone(ios, tz_); + } + }; + + } + + template + inline detail::time_manip time_fmt(timezone tz, const CharT* fmt) + { + return detail::time_manip(tz, fmt); + } + + template + inline detail::time_manip time_fmt(timezone tz, std::basic_string fmt) + { + // todo move semantics + return detail::time_manip(tz, fmt); + } + + inline detail::time_man time_fmt(timezone f) + { + return detail::time_man(f); + } + + /** + * time_fmt_io_saver i/o saver. + * + * See Boost.IO i/o state savers for a motivating compression. + */ + template > + struct time_fmt_io_saver + { + + //! the type of the state to restore + typedef std::basic_ostream state_type; + //! the type of aspect to save + typedef std::basic_string aspect_type; + + /** + * Explicit construction from an i/o stream. + * + * Store a reference to the i/o stream and the value of the associated @c time format . + */ + explicit time_fmt_io_saver(state_type &s) : + s_save_(s), a_save_(get_time_fmt(s_save_)) + { + } + + /** + * Construction from an i/o stream and a @c time format to restore. + * + * Stores a reference to the i/o stream and the value @c new_value to restore given as parameter. + */ + time_fmt_io_saver(state_type &s, aspect_type new_value) : + s_save_(s), a_save_(new_value) + { + } + + /** + * Destructor. + * + * Restores the i/o stream with the format to be restored. + */ + ~time_fmt_io_saver() + { + this->restore(); + } + + /** + * Restores the i/o stream with the time format to be restored. + */ + void restore() + { + set_time_fmt(a_save_, a_save_); + } + private: + state_type& s_save_; + aspect_type a_save_; + }; + + /** + * timezone_io_saver i/o saver. + * + * See Boost.IO i/o state savers for a motivating compression. + */ + struct timezone_io_saver + { + + //! the type of the state to restore + typedef std::ios_base state_type; + //! the type of aspect to save + typedef timezone aspect_type; + + /** + * Explicit construction from an i/o stream. + * + * Store a reference to the i/o stream and the value of the associated @c timezone. + */ + explicit timezone_io_saver(state_type &s) : + s_save_(s), a_save_(get_timezone(s_save_)) + { + } + + /** + * Construction from an i/o stream and a @c timezone to restore. + * + * Stores a reference to the i/o stream and the value @c new_value to restore given as parameter. + */ + timezone_io_saver(state_type &s, aspect_type new_value) : + s_save_(s), a_save_(new_value) + { + } + + /** + * Destructor. + * + * Restores the i/o stream with the format to be restored. + */ + ~timezone_io_saver() + { + this->restore(); + } + + /** + * Restores the i/o stream with the timezone to be restored. + */ + void restore() + { + set_timezone(s_save_, a_save_); + } + private: + state_type& s_save_; + aspect_type a_save_; + }; + + /** + * + * @param os + * @param tp + * @Effects Behaves as a formatted output function. After constructing a @c sentry object, if the @ sentry + * converts to true, calls to @c facet.put(os,os,os.fill(),tp) where @c facet is the @c time_point_put + * facet associated to @c os or a new created instance of the default @c time_point_put facet. + * @return @c os. + */ + template + std::basic_ostream& + operator<<(std::basic_ostream& os, const time_point& tp) + { + + typedef std::basic_string string_type; +#ifndef BOOST_NO_EXCEPTIONS + bool failed = false; + try // BOOST_NO_EXCEPTIONS protected +#endif + { + std::ios_base::iostate err = std::ios_base::goodbit; +#ifndef BOOST_NO_EXCEPTIONS + try // BOOST_NO_EXCEPTIONS protected +#endif + { + typename std::basic_ostream::sentry opfx(os); + if (bool(opfx)) + { + if (!std::has_facet >(os.getloc())) + { + if (time_point_put ().put(os, os, os.fill(), tp) .failed()) + { + err = std::ios_base::badbit; + } + } + else + { + if (std::use_facet >(os.getloc()) .put(os, os, os.fill(), tp).failed()) + { + err = std::ios_base::badbit; + } + } + os.width(0); + } + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + bool flag = false; + try // BOOST_NO_EXCEPTIONS protected + { + os.setstate(std::ios_base::failbit); + } + catch (std::ios_base::failure ) // BOOST_NO_EXCEPTIONS protected + { + flag = true; + } + if (flag) throw; + } +#endif + if (err) os.setstate(err); + return os; + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + failed = true; + } + if (failed) os.setstate(std::ios_base::failbit | std::ios_base::badbit); +#endif + return os; + } + + template + std::basic_istream& + operator>>(std::basic_istream& is, time_point& tp) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + std::ios_base::iostate err = std::ios_base::goodbit; + +#ifndef BOOST_NO_EXCEPTIONS + try // BOOST_NO_EXCEPTIONS protected +#endif + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + typename std::basic_istream::sentry ipfx(is); + if (bool(ipfx)) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (!std::has_facet >(is.getloc())) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + time_point_get ().get(is, std::istreambuf_iterator(), is, err, tp); + } + else + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + std::use_facet >(is.getloc()).get(is, std::istreambuf_iterator(), is, + err, tp); + } + } + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + bool flag = false; + try + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + is.setstate(std::ios_base::failbit); + } + catch (std::ios_base::failure ) // BOOST_NO_EXCEPTIONS protected + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + flag = true; + } + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (flag) throw; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + } +#endif + if (err) is.setstate(err); + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + return is; + } + +#ifndef BOOST_CHRONO_NO_UTC_TIMEPOINT + + namespace detail + { +#if BOOST_CHRONO_INTERNAL_TIMEGM + int is_leap(int year) + { + if(year % 400 == 0) + return 1; + if(year % 100 == 0) + return 0; + if(year % 4 == 0) + return 1; + return 0; + } + inline int days_from_0(int year) + { + year--; + return 365 * year + (year / 400) - (year/100) + (year / 4); + } + int days_from_1970(int year) + { + static const int days_from_0_to_1970 = days_from_0(1970); + return days_from_0(year) - days_from_0_to_1970; + } + int days_from_1jan(int year,int month,int day) + { + static const int days[2][12] = + { + { 0,31,59,90,120,151,181,212,243,273,304,334}, + { 0,31,60,91,121,152,182,213,244,274,305,335} + }; + return days[is_leap(year)][month-1] + day - 1; + } + + time_t internal_timegm(std::tm const *t) + { + int year = t->tm_year + 1900; + int month = t->tm_mon; + if(month > 11) + { + year += month/12; + month %= 12; + } + else if(month < 0) + { + int years_diff = (-month + 11)/12; + year -= years_diff; + month+=12 * years_diff; + } + month++; + int day = t->tm_mday; + int day_of_year = days_from_1jan(year,month,day); + int days_since_epoch = days_from_1970(year) + day_of_year; + + time_t seconds_in_day = 3600 * 24; + time_t result = seconds_in_day * days_since_epoch + 3600 * t->tm_hour + 60 * t->tm_min + t->tm_sec; + + return result; + } +#endif + } // detail + +#if defined BOOST_CHRONO_PROVIDES_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT + template + std::basic_ostream& + operator<<(std::basic_ostream& os, const time_point& tp) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + typename std::basic_ostream::sentry ok(os); + if (bool(ok)) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + bool failed = false; +#ifndef BOOST_NO_EXCEPTIONS + try // BOOST_NO_EXCEPTIONS protected +#endif + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + const CharT* pb = 0; //nullptr; + const CharT* pe = pb; + std::basic_string fmt = get_time_fmt (os); + pb = fmt.data(); + pe = pb + fmt.size(); + + timezone tz = get_timezone(os); + std::locale loc = os.getloc(); + time_t t = system_clock::to_time_t(time_point_cast(tp)); + std::tm tm; + if (tz == timezone::local) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; +#if defined BOOST_WINDOWS && ! defined(__CYGWIN__) + std::tm *tmp = 0; + if ((tmp=localtime(&t)) == 0) + failed = true; + tm =*tmp; +#else + if (localtime_r(&t, &tm) == 0) failed = true; +#endif + } + else + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; +#if defined BOOST_WINDOWS && ! defined(__CYGWIN__) + std::tm *tmp = 0; + if((tmp = gmtime(&t)) == 0) + failed = true; + tm = *tmp; +#else + if (gmtime_r(&t, &tm) == 0) failed = true; +#endif + + } + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (!failed) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + const std::time_put& tpf = std::use_facet >(loc); + if (pb == pe) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + CharT pattern[] = + { '%', 'Y', '-', '%', 'm', '-', '%', 'd', ' ', '%', 'H', ':', '%', 'M', ':' }; + pb = pattern; + pe = pb + sizeof (pattern) / sizeof(CharT); + failed = tpf.put(os, os, os.fill(), &tm, pb, pe).failed(); + if (!failed) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + duration d = tp - system_clock::from_time_t(t) + seconds(tm.tm_sec); + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (d.count() < 10) os << CharT('0'); + //if (! os.good()) { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + // throw "exception"; + //} + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + std::ios::fmtflags flgs = os.flags(); + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + os.setf(std::ios::fixed, std::ios::floatfield); + //if (! os.good()) { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //throw "exception"; + //} + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< " " << d.count() << std::endl; + os << d.count(); + //if (! os.good()) { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //throw "exception"; + //} + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< " " << d.count() << std::endl; + os.flags(flgs); + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + if (tz == timezone::local) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + CharT sub_pattern[] = + { ' ', '%', 'z' }; + pb = sub_pattern; + pe = pb + +sizeof (sub_pattern) / sizeof(CharT); + failed = tpf.put(os, os, os.fill(), &tm, pb, pe).failed(); + } + else + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + CharT sub_pattern[] = + { ' ', '+', '0', '0', '0', '0', 0 }; + os << sub_pattern; + } + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + } + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + } + else + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + failed = tpf.put(os, os, os.fill(), &tm, pb, pe).failed(); + } + } + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + failed = true; + } +#endif + if (failed) + { + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + os.setstate(std::ios_base::failbit | std::ios_base::badbit); + } + } + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + return os; + } +#endif + + namespace detail + { + + template + minutes extract_z(InputIterator& b, InputIterator e, std::ios_base::iostate& err, const std::ctype& ct) + { + int min = 0; + if (b != e) + { + char cn = ct.narrow(*b, 0); + if (cn != '+' && cn != '-') + { + err |= std::ios_base::failbit; + return minutes(0); + } + int sn = cn == '-' ? -1 : 1; + int hr = 0; + for (int i = 0; i < 2; ++i) + { + if (++b == e) + { + err |= std::ios_base::eofbit | std::ios_base::failbit; + return minutes(0); + } + cn = ct.narrow(*b, 0); + if (! ('0' <= cn && cn <= '9')) + { + err |= std::ios_base::failbit; + return minutes(0); + } + hr = hr * 10 + cn - '0'; + } + for (int i = 0; i < 2; ++i) + { + if (++b == e) + { + err |= std::ios_base::eofbit | std::ios_base::failbit; + return minutes(0); + } + cn = ct.narrow(*b, 0); + if (! ('0' <= cn && cn <= '9')) + { + err |= std::ios_base::failbit; + return minutes(0); + } + min = min * 10 + cn - '0'; + } + if (++b == e) { + err |= std::ios_base::eofbit; + } + min += hr * 60; + min *= sn; + } + else + { + err |= std::ios_base::eofbit | std::ios_base::failbit; + } + return minutes(min); + } + + } // detail + +#if defined BOOST_CHRONO_PROVIDES_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT + template + std::basic_istream& + operator>>(std::basic_istream& is, time_point& tp) + { + typename std::basic_istream::sentry ok(is); + if (bool(ok)) + { + std::ios_base::iostate err = std::ios_base::goodbit; +#ifndef BOOST_NO_EXCEPTIONS + try +#endif + { + const CharT* pb = 0; //nullptr; + const CharT* pe = pb; + std::basic_string fmt = get_time_fmt (is); + pb = fmt.data(); + pe = pb + fmt.size(); + + timezone tz = get_timezone(is); + std::locale loc = is.getloc(); + const std::time_get& tg = std::use_facet >(loc); + const std::ctype& ct = std::use_facet >(loc); + tm tm; // {0} + typedef std::istreambuf_iterator It; + if (pb == pe) + { + CharT pattern[] = + { '%', 'Y', '-', '%', 'm', '-', '%', 'd', ' ', '%', 'H', ':', '%', 'M', ':' }; + pb = pattern; + pe = pb + sizeof (pattern) / sizeof(CharT); +#if defined BOOST_CHRONO_USES_INTERNAL_TIME_GET + const detail::time_get& dtg(tg); + dtg.get(is, 0, is, err, &tm, pb, pe); +#else + tg.get(is, 0, is, err, &tm, pb, pe); +#endif + if (err & std::ios_base::failbit) goto exit; + double sec; + CharT c = CharT(); + is >> sec; + if (is.fail()) + { + err |= std::ios_base::failbit; + goto exit; + } + //std::cerr << "sec= "<< sec << std::endl; + It i(is); + It eof; + c = *i; + if (++i == eof || c != ' ') + { + err |= std::ios_base::failbit; + goto exit; + } + minutes min = detail::extract_z(i, eof, err, ct); + //std::cerr << "min= "<< min.count() << std::endl; + + if (err & std::ios_base::failbit) goto exit; + time_t t; +#if BOOST_CHRONO_INTERNAL_TIMEGM + t = detail::internal_timegm(&tm); +#else + t = timegm(&tm); +#endif + tp = time_point_cast( + system_clock::from_time_t(t) - min + round (duration (sec)) + ); + } + else + { + const CharT z[2] = + { '%', 'z' }; + const CharT* fz = std::search(pb, pe, z, z + 2); +#if defined BOOST_CHRONO_USES_INTERNAL_TIME_GET + const detail::time_get& dtg(tg); + dtg.get(is, 0, is, err, &tm, pb, fz); +#else + tg.get(is, 0, is, err, &tm, pb, fz); +#endif + minutes minu(0); + if (fz != pe) + { + if (err != std::ios_base::goodbit) + { + err |= std::ios_base::failbit; + goto exit; + } + It i(is); + It eof; + minu = detail::extract_z(i, eof, err, ct); + if (err & std::ios_base::failbit) goto exit; + if (fz + 2 != pe) + { + if (err != std::ios_base::goodbit) + { + err |= std::ios_base::failbit; + goto exit; + } +#if defined BOOST_CHRONO_USES_INTERNAL_TIME_GET + const detail::time_get& dtg(tg); + dtg.get(is, 0, is, err, &tm, fz + 2, pe); +#else + tg.get(is, 0, is, err, &tm, fz + 2, pe); +#endif + if (err & std::ios_base::failbit) goto exit; + } + } + tm.tm_isdst = -1; + time_t t; + if (tz == timezone::utc || fz != pe) + { +#if BOOST_CHRONO_INTERNAL_TIMEGM + t = detail::internal_timegm(&tm); +#else + t = timegm(&tm); +#endif + } + else + { + t = mktime(&tm); + } + tp = time_point_cast( + system_clock::from_time_t(t) - minu + ); + } + } +#ifndef BOOST_NO_EXCEPTIONS + catch (...) // BOOST_NO_EXCEPTIONS protected + { + err |= std::ios_base::badbit | std::ios_base::failbit; + } +#endif + exit: is.setstate(err); + } + return is; + } +#endif +#endif //UTC + } // chrono + +} + +#endif // header diff --git a/3party/boost/boost/chrono/io/time_point_put.hpp b/3party/boost/boost/chrono/io/time_point_put.hpp new file mode 100644 index 0000000000..9c8c7cadd0 --- /dev/null +++ b/3party/boost/boost/chrono/io/time_point_put.hpp @@ -0,0 +1,261 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// + +/** + * Duration formatting facet for output. + */ +#ifndef BOOST_CHRONO_IO_TIME_POINT_PUT_HPP +#define BOOST_CHRONO_IO_TIME_POINT_PUT_HPP + +#include +#include +#include +#include +#include + +namespace boost +{ + namespace chrono + { + + /** + * @tparam ChatT a character type + * @tparam OutputIterator a model of @c OutputIterator + * + * The @c time_point_put facet provides facilities for formatted output of @c time_point values. + * The member function of @c time_point_put take a @c time_point and format it into character string representation. + * + */ + template > + class time_point_put: public std::locale::facet + { + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of character string passed to member functions. + */ + typedef std::basic_string string_type; + /** + * Type of iterator used to write in the character buffer. + */ + typedef OutputIterator iter_type; + + /** + * Construct a time_point_put facet. + * @param refs + * @Effects Construct a time_point_put facet. + * If the @c refs argument is @c 0 then destruction of the object is + * delegated to the @c locale, or locales, containing it. This allows + * the user to ignore lifetime management issues. On the other had, + * if @c refs is @c 1 then the object must be explicitly deleted; + * the @c locale will not do so. In this case, the object can be + * maintained across the lifetime of multiple locales. + */ + explicit time_point_put(size_t refs = 0) : + std::locale::facet(refs) + { + } + + /** + * @param i an output stream iterator + * @param ios a reference to a ios_base + * @param fill the character used as filler + * @param tp the @c time_point + * @param pattern begin of the formatting pattern + * @param pat_end end of the formatting pattern + * + * @Effects Steps through the sequence from @c pattern to @c pat_end, + * identifying characters that are part of a pattern sequence. Each character + * that is not part of a pattern sequence is written to @c s immediately, and + * each pattern sequence, as it is identified, results in a call to + * @c put_duration or @c put_epoch; + * thus, pattern elements and other characters are interleaved in the output + * in the order in which they appear in the pattern. Pattern sequences are + * identified by converting each character @c c to a @c char value as if by + * @c ct.narrow(c,0), where @c ct is a reference to @c ctype obtained from + * @c ios.getloc(). The first character of each sequence is equal to @c '%', + * followed by a pattern specifier character @c spec, which can be @c 'd' for + * the duration value or @c 'e' for the epoch. + * For each valid pattern sequence identified, calls + * put_duration(s, ios, fill, tp.time_since_epoch()) or put_epoch(s, ios). + * + * @Returns An iterator pointing immediately after the last character produced. + */ + + template + iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point const& tp, const CharT* pattern, + const CharT* pat_end) const + { + if (std::has_facet >(ios.getloc())) + { + time_point_units const &facet = + std::use_facet >(ios.getloc()); + return put(facet, i, ios, fill, tp, pattern, pat_end); + } + else + { + time_point_units_default facet; + return put(facet, i, ios, fill, tp, pattern, pat_end); + } + } + + template + iter_type put(time_point_units const& units_facet, iter_type s, std::ios_base& ios, char_type fill, + time_point const& tp, const CharT* pattern, const CharT* pat_end) const + { + + const std::ctype& ct = std::use_facet >(ios.getloc()); + for (; pattern != pat_end; ++pattern) + { + if (ct.narrow(*pattern, 0) == '%') + { + if (++pattern == pat_end) + { + *s++ = pattern[-1]; + break; + } + char fmt = ct.narrow(*pattern, 0); + switch (fmt) + { + case 'd': + { + s = put_duration(s, ios, fill, tp.time_since_epoch()); + break; + } + case 'e': + { + s = put_epoch (units_facet, s, ios); + break; + } + default: + BOOST_ASSERT(false && "Boost::Chrono internal error."); + break; + } + } + else + *s++ = *pattern; + } + return s; + } + + /** + * @param i an output stream iterator + * @param ios a reference to a ios_base + * @param fill the character used as filler + * @param tp the @c time_point + * @param pattern begin of the formatting pattern + * @param pat_end end of the formatting pattern + * + * @Effects Stores the time_point pattern from the @c time_point_unit facet in let say @c str. Last as if + * @code + * return put(s, ios, dill, tp, str.data(), str.data() + str.size()); + * @endcode + * @Returns An iterator pointing immediately after the last character produced. + */ + template + iter_type put(iter_type i, std::ios_base& ios, char_type fill, time_point const& tp) const + { + if (std::has_facet >(ios.getloc())) + { + time_point_units const &facet = + std::use_facet >(ios.getloc()); + std::basic_string str = facet.get_pattern(); + return put(facet, i, ios, fill, tp, str.data(), str.data() + str.size()); + } + else + { + time_point_units_default facet; + std::basic_string str = facet.get_pattern(); + return put(facet, i, ios, fill, tp, str.data(), str.data() + str.size()); + } + } + + /** + * @param i an output stream iterator + * @param ios a reference to a ios_base + * @param fill the character used as filler + * @param d the @c duration + * @Effects As if facet.put(s, ios, fill, d) where facet is the @c duration_put facet associated + * to the @c ios or a new instance of @c duration_put. + * @Returns An iterator pointing immediately after the last character produced. + */ + template + iter_type put_duration(iter_type i, std::ios_base& ios, char_type fill, duration const& d) const + { + if (std::has_facet >(ios.getloc())) + { + duration_put const &facet = std::use_facet >(ios.getloc()); + return facet.put(i, ios, fill, d); + } + else + { + duration_put facet; + return facet.put(i, ios, fill, d); + } + } + + /** + * + * @param i an output stream iterator + * @param ios a reference to a ios_base + * @Effects As if + * @code + * string_type str = facet.template get_epoch(); + * s=std::copy(str.begin(), str.end(), s); + * @endcode + * where facet is the @c time_point_units facet associated + * to the @c ios or a new instance of @c time_point_units_default. + * @Returns s, iterator pointing immediately after the last character produced. + */ + + template + iter_type put_epoch(iter_type i, std::ios_base& os) const + { + if (std::has_facet >(os.getloc())) + { + time_point_units const &facet = std::use_facet >(os.getloc()); + return put_epoch (facet, i, os); + } + else + { + time_point_units_default facet; + return put_epoch (facet, i, os); + } + } + + template + iter_type put_epoch(time_point_units const& facet, iter_type s, std::ios_base&) const + { + string_type str = facet.template get_epoch(); + s= std::copy(str.begin(), str.end(), s); + return s; + } + + /** + * Unique identifier for this type of facet. + */ + static std::locale::id id; + + /** + * @Effects Destroy the facet + */ + ~time_point_put() + { + } + + }; + + template + std::locale::id time_point_put::id; + + } // chrono +} // boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/time_point_units.hpp b/3party/boost/boost/chrono/io/time_point_units.hpp new file mode 100644 index 0000000000..24284a76dc --- /dev/null +++ b/3party/boost/boost/chrono/io/time_point_units.hpp @@ -0,0 +1,244 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// + +#ifndef BOOST_CHRONO_IO_TIME_POINT_UNITS_HPP +#define BOOST_CHRONO_IO_TIME_POINT_UNITS_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost +{ + namespace chrono + { + + /** + * @c time_point_units facet gives useful information about the time_point pattern, + * the text associated to a time_point's epoch, + */ + template + class time_point_units: public std::locale::facet + { + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of character string used by member functions. + */ + typedef std::basic_string string_type; + + /** + * Unique identifier for this type of facet. + */ + static std::locale::id id; + + /** + * Construct a @c time_point_units facet. + * @param refs + * @Effects Construct a @c time_point_units facet. + * If the @c refs argument is @c 0 then destruction of the object is + * delegated to the @c locale, or locales, containing it. This allows + * the user to ignore lifetime management issues. On the other had, + * if @c refs is @c 1 then the object must be explicitly deleted; + * the @c locale will not do so. In this case, the object can be + * maintained across the lifetime of multiple locales. + */ + explicit time_point_units(size_t refs = 0) : + std::locale::facet(refs) + { + } + + /** + * @return the pattern to be used by default. + */ + virtual string_type get_pattern() const =0; + + /** + * @return the epoch associated to the clock @c Clock calling @c do_get_epoch(Clock()) + */ + template + string_type get_epoch() const + { + return do_get_epoch(Clock()); + } + + protected: + /** + * Destroy the facet. + */ + virtual ~time_point_units() {} + + + /** + * + * @param c a dummy instance of @c system_clock. + * @return The epoch string associated to the @c system_clock. + */ + virtual string_type do_get_epoch(system_clock) const=0; + + /** + * + * @param c a dummy instance of @c steady_clock. + * @return The epoch string associated to the @c steady_clock. + */ + virtual string_type do_get_epoch(steady_clock) const=0; + +#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) + /** + * + * @param c a dummy instance of @c process_real_cpu_clock. + * @return The epoch string associated to the @c process_real_cpu_clock. + */ + virtual string_type do_get_epoch(process_real_cpu_clock) const=0; + /** + * + * @param c a dummy instance of @c process_user_cpu_clock. + * @return The epoch string associated to the @c process_user_cpu_clock. + */ + virtual string_type do_get_epoch(process_user_cpu_clock) const=0; + /** + * + * @param c a dummy instance of @c process_system_cpu_clock. + * @return The epoch string associated to the @c process_system_cpu_clock. + */ + virtual string_type do_get_epoch(process_system_cpu_clock) const=0; + /** + * + * @param c a dummy instance of @c process_cpu_clock. + * @return The epoch string associated to the @c process_cpu_clock. + */ + virtual string_type do_get_epoch(process_cpu_clock) const=0; +#endif +#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) + /** + * + * @param c a dummy instance of @c thread_clock. + * @return The epoch string associated to the @c thread_clock. + */ + virtual string_type do_get_epoch(thread_clock) const=0; +#endif + + }; + + template + std::locale::id time_point_units::id; + + + // This class is used to define the strings for the default English + template + class time_point_units_default: public time_point_units + { + public: + /** + * Type of character the facet is instantiated on. + */ + typedef CharT char_type; + /** + * Type of character string returned by member functions. + */ + typedef std::basic_string string_type; + + explicit time_point_units_default(size_t refs = 0) : + time_point_units (refs) + { + } + ~time_point_units_default() {} + + /** + * @return the default pattern "%d%e". + */ + string_type get_pattern() const + { + static const CharT t[] = + { '%', 'd', '%', 'e' }; + static const string_type pattern(t, t + sizeof (t) / sizeof (t[0])); + + return pattern; + } + + protected: + /** + * @param c a dummy instance of @c system_clock. + * @return The epoch string returned by @c clock_string::since(). + */ + string_type do_get_epoch(system_clock ) const + { + return clock_string::since(); + } + /** + * @param c a dummy instance of @c steady_clock. + * @return The epoch string returned by @c clock_string::since(). + */ + string_type do_get_epoch(steady_clock ) const + { + return clock_string::since(); + } + +#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS) + /** + * @param c a dummy instance of @c process_real_cpu_clock. + * @return The epoch string returned by @c clock_string::since(). + */ + string_type do_get_epoch(process_real_cpu_clock ) const + { + return clock_string::since(); + } + /** + * @param c a dummy instance of @c process_user_cpu_clock. + * @return The epoch string returned by @c clock_string::since(). + */ + string_type do_get_epoch(process_user_cpu_clock ) const + { + return clock_string::since(); + } + /** + * @param c a dummy instance of @c process_system_cpu_clock. + * @return The epoch string returned by @c clock_string::since(). + */ + string_type do_get_epoch(process_system_cpu_clock ) const + { + return clock_string::since(); + } + /** + * @param c a dummy instance of @c process_cpu_clock. + * @return The epoch string returned by @c clock_string::since(). + */ + string_type do_get_epoch(process_cpu_clock ) const + { + return clock_string::since(); + } + +#endif +#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK) + /** + * @param c a dummy instance of @c thread_clock. + * @return The epoch string returned by @c clock_string::since(). + */ + string_type do_get_epoch(thread_clock ) const + { + return clock_string::since(); + } +#endif + + }; + + + } // chrono + +} // boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/timezone.hpp b/3party/boost/boost/chrono/io/timezone.hpp new file mode 100644 index 0000000000..67975da96f --- /dev/null +++ b/3party/boost/boost/chrono/io/timezone.hpp @@ -0,0 +1,30 @@ +// (C) Copyright Howard Hinnant +// (C) Copyright 2010-2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// This code was adapted by Vicente from Howard Hinnant's experimental work +// on chrono i/o to Boost + +#ifndef BOOST_CHRONO_IO_TIMEZONE_HPP +#define BOOST_CHRONO_IO_TIMEZONE_HPP +#include + +namespace boost +{ + namespace chrono + { + /** + * Scoped enumeration emulation stating whether the time_point for system_clock I/O is UTC or local. + */ + BOOST_SCOPED_ENUM_DECLARE_BEGIN(timezone) + { + utc, local + } + BOOST_SCOPED_ENUM_DECLARE_END(timezone) + + } // chrono +} // boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/utility/ios_base_state_ptr.hpp b/3party/boost/boost/chrono/io/utility/ios_base_state_ptr.hpp new file mode 100644 index 0000000000..a1768d22c2 --- /dev/null +++ b/3party/boost/boost/chrono/io/utility/ios_base_state_ptr.hpp @@ -0,0 +1,436 @@ +// boost/chrono/utility/ios_base_pword_ptr.hpp ------------------------------------------------------------// + +// Copyright 2011 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/chrono for documentation. + +#ifndef BOOST_CHRONO_UTILITY_IOS_BASE_STATE_PTR_HPP +#define BOOST_CHRONO_UTILITY_IOS_BASE_STATE_PTR_HPP + +#include +#include + +/** + * + + + */ +namespace boost +{ + namespace chrono + { + namespace detail + { + + /** + * xalloc key holder. + */ + template + struct xalloc_key_holder + { + static int value; //< the xalloc value associated to T. + static bool initialized; //< whether the value has been initialized or not. + }; + + template + int xalloc_key_holder::value = 0; + + template + bool xalloc_key_holder::initialized = false; + + } + + /** + * xalloc key initialiazer. + * + * Declare a static variable of this type to ensure that the xalloc_key_holder is initialized correctly. + */ + template + struct xalloc_key_initializer + { + xalloc_key_initializer() + { + std::cout << __FILE__ << ":" << __LINE__ << std::endl; + if (!detail::xalloc_key_holder::initialized) + { + detail::xalloc_key_holder::value = std::ios_base::xalloc(); + detail::xalloc_key_holder::initialized = true; + std::cout << __FILE__ << ":" << __LINE__ << " " << detail::xalloc_key_holder::value < + class ios_state_ptr + { + public: + /** + * The pointee type + */ + typedef T element_type; + /** + * Explicit constructor. + * @param ios the ios + * @Effects Constructs a @c ios_state_ptr by storing the associated @c ios. + */ + explicit ios_state_ptr(std::ios_base& ios) : + ios_(ios) + { + std::cout << __FILE__ << ":" << __LINE__ << std::endl; + + } + /** + * Nothing to do as xalloc index can not be removed. + */ + ~ios_state_ptr() + { + } + + /** + * @Effects Allocates the index if not already done. + * Registers the callback responsible of maintaining the state pointer coherency, if not already done. + * Retrieves the associated ios pointer + * @return the retrieved pointer statically casted to const. + */ + T const* get() const BOOST_NOEXCEPT + { + register_once(index(), ios_); + void* &pw = ios_.pword(index()); + if (pw == 0) + { + return 0; + } + return static_cast (pw); + } + /** + * @Effects Allocates the index if not already done. + * Registers the callback responsible of maintaining the state pointer coherency, if not already done. + * Retrieves the associated ios pointer + * @return the retrieved pointer. + */ + T * get() BOOST_NOEXCEPT + { + register_once(index(), ios_); + void* &pw = ios_.pword(index()); + if (pw == 0) + { + return 0; + } + return static_cast (pw); + } + /** + * @Effects as if @c return get(); + * @return the retrieved pointer. + */ + T * operator->()BOOST_NOEXCEPT + { + return get(); + } + /** + * @Effects as if @c return get(); + * @return the retrieved pointer. + */ + T const * operator->() const BOOST_NOEXCEPT + { + return get(); + } + + /** + * @Effects as if @c return *get(); + * @return a reference to the retrieved state. + * @Remark The behavior is undefined if @c get()==0. + */ + T & operator*() BOOST_NOEXCEPT + { + return *get(); + } + /** + * @Effects as if @c return *get(); + * @return a reference to the retrieved state. + * @Remark The behavior is undefined if @c get()==0. + */ + T const & operator *() const BOOST_NOEXCEPT + { + return *get(); + } + + /** + * @Effects reset the current pointer after storing in a temporary variable the pointer to the current state. + * @return the stored state pointer. + */ + T * release() BOOST_NOEXCEPT + { + T const* f = get(); + reset(); + return f; + } + + /** + * + * @param new_ptr the new pointer. + * @Effects deletes the current state and replace it with the new one. + */ + void reset(T* new_ptr = 0)BOOST_NOEXCEPT + { + register_once(index(), ios_); + void*& pw = ios_.pword(index()); + delete static_cast (pw); + pw = new_ptr; + } + +#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) + typedef T* (ios_state_ptr::*bool_type)(); + operator bool_type() const BOOST_NOEXCEPT + { + return (get()!=0)?&ios_state_ptr::release:0; + } + bool operator!() const BOOST_NOEXCEPT + { + return (get()==0)?&ios_state_ptr::release:0; + } +#else + /** + * Explicit conversion to bool. + */ + explicit operator bool() const BOOST_NOEXCEPT + { + return get()!=0; + } +#endif + + std::ios_base& getios()BOOST_NOEXCEPT + { + return ios_; + } + std::ios_base& getios() const BOOST_NOEXCEPT + { + return ios_; + } + /** + * Implicit conversion to the ios_base + */ + operator std::ios_base&() BOOST_NOEXCEPT + { + return ios_; + } + /** + * Implicit conversion to the ios_base const + */ + operator std::ios_base&() const BOOST_NOEXCEPT + { + return ios_; + } + private: + static inline bool is_registerd(std::ios_base& ios) + { + long iw = ios.iword(index()); + return (iw == 1); + } + static inline void set_registered(std::ios_base& ios) + { + long& iw = ios.iword(index()); + iw = 1; + } + static inline void callback(std::ios_base::event evt, std::ios_base& ios, int index) + { + switch (evt) + { + case std::ios_base::erase_event: + { + void*& pw = ios.pword(index); + if (pw != 0) + { + T* ptr = static_cast (pw); + delete ptr; + pw = 0; + } + break; + } + case std::ios_base::copyfmt_event: + { + void*& pw = ios.pword(index); + if (pw != 0) + { + pw = new T(*static_cast (pw)); + } + break; + } + default: + break; + } + } + + static inline int index() + { + return detail::xalloc_key_holder::value; + } + + static inline void register_once(int indx, std::ios_base& ios) + { + // needs a mask registered + if (!is_registerd(ios)) + { + set_registered(ios); + ios.register_callback(callback, indx); + } + } + + protected: + std::ios_base& ios_; + //static detail::xalloc_key_initializer xalloc_key_initializer_; + + }; + //template + //detail::xalloc_key_initializer ios_state_ptr::xalloc_key_initializer_; + + + /** + * @c ios_state_not_null_ptr is a non null variant of @c ios_state_ptr. + * @tparm T + * @Requires @c T must be @c DefaultConstructible and @c HeapAllocatable + */ + template + class ios_state_not_null_ptr: public ios_state_ptr + { + typedef ios_state_ptr base_type; + public: + explicit ios_state_not_null_ptr(std::ios_base& ios) : + base_type(ios) + { + if (this->get() == 0) + { + this->base_type::reset(new T()); + } + } + ~ios_state_not_null_ptr() + { + } + + void reset(T* new_value) BOOST_NOEXCEPT + { + BOOST_ASSERT(new_value!=0); + this->base_type::reset(new_value); + } + + }; + + /** + * This class is useful to associate some flags to an std::ios_base. + */ + template + class ios_flags + { + public: + /** + * + * @param ios the associated std::ios_base. + * @Postcondition flags()==0 + */ + explicit ios_flags(std::ios_base& ios) : + ios_(ios) + { + } + ~ios_flags() + { + } + + /** + * @Returns The format control information. + */ + long flags() const BOOST_NOEXCEPT + { + return value(); + } + + /** + * @param v the new bit mask. + * @Postcondition v == flags(). + * @Returns The previous value of @c flags(). + */ + long flags(long v)BOOST_NOEXCEPT + { + long tmp = flags(); + ref() = v; + return tmp; + } + + /** + * @param v the new value + * @Effects: Sets @c v in @c flags(). + * @Returns: The previous value of @c flags(). + */ + long setf(long v) + { + long tmp = value(); + ref() |= v; + return tmp; + } + + /** + * @param mask the bit mask to clear. + * @Effects: Clears @c mask in @c flags(). + */ + void unsetf(long mask) + { + ref() &= ~mask; + } + + /** + * + * @param v + * @param mask + * @Effects: Clears @c mask in @c flags(), sets v & mask in @c flags(). + * @Returns: The previous value of flags(). + */ + long setf(long v, long mask) + { + long tmp = value(); + unsetf(mask); + ref() |= v & mask; + return tmp; + } + + /** + * implicit conversion to the @c ios_base + */ + operator std::ios_base&()BOOST_NOEXCEPT + { + return ios_; + } + /** + * implicit conversion to the @c ios_base const + */ + operator std::ios_base const&() const BOOST_NOEXCEPT + { + return ios_; + } + private: + long value() const BOOST_NOEXCEPT + { + return ios_.iword(index()); + } + long& ref()BOOST_NOEXCEPT + { + return ios_.iword(index()); + } + static inline int index() + { + return detail::xalloc_key_holder::value; + } + + std::ios_base& ios_; + //static detail::xalloc_key_initializer xalloc_key_initializer_; + + }; + //template + //detail::xalloc_key_initializer ios_flags::xalloc_key_initializer_; + + } // namespace chrono +} // namespace boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/utility/manip_base.hpp b/3party/boost/boost/chrono/io/utility/manip_base.hpp new file mode 100644 index 0000000000..f4a5f562c4 --- /dev/null +++ b/3party/boost/boost/chrono/io/utility/manip_base.hpp @@ -0,0 +1,101 @@ +// boost/chrono/utility/manip_base.hpp ------------------------------------------------------------// + +// Copyright 2011 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/chrono for documentation. + +#ifndef BOOST_CHRONO_UTILITY_MANIP_BASE_PTR_HPP +#define BOOST_CHRONO_UTILITY_MANIP_BASE_PTR_HPP + +#include + +/** + * + + */ + +namespace boost +{ + namespace chrono + { + + /** + * manip is a manipulator mixin class following the CRTP. + * @tparam Final the derived from manip and final type + * + * @Example + * @code + + class mendl: public manip + { + public: + explicit mendl(size_t how_many) : + count(how_many) {} + template + void operator()(out_stream &out) const + { + for (size_t line = 0; line < count; ++line) + { + out.put(out.widen('\n')); + } + out.flush(); + } + private: + size_t count; + }; + + * @codeend + */ + template + class manip + { + public: + /** + * + * @param ios the io stream or ios_base. + * @Effects calls to the manipulator final functor. + */ + //template + void operator()(std::ios_base &ios) const + { + (*static_cast (this))(ios); + } + }; + + /** + * @c manip stream inserter + * @param out the io stream or ios_base. + * @param op the manipulator instance. + * @Effects if @c out is good calls to the manipulator functor @op. + * @return @c out + */ + template + out_stream &operator<<(out_stream &out, const manip &op) + { + if (out.good()) + op(out); + return out; + } + + /** + * @c manip stream extractor + * @param in the io stream or ios_base. + * @param op the manipulator instance. + * @Effects if @c in is good calls to the manipulator functor @op. + * @return @c in + */ + template + in_stream &operator>>(in_stream &in, const manip &op) + { + if (in.good()) + op(in); + return in; + } + + } // namespace chrono +} // namespace boost + +#endif // header diff --git a/3party/boost/boost/chrono/io/utility/to_string.hpp b/3party/boost/boost/chrono/io/utility/to_string.hpp new file mode 100644 index 0000000000..4717ba6ad3 --- /dev/null +++ b/3party/boost/boost/chrono/io/utility/to_string.hpp @@ -0,0 +1,50 @@ +// boost/chrono/utility/to_string.hpp +// +// Copyright 2011 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). + +#ifndef BOOST_CHRONO_UTILITY_TO_STRING_HPP +#define BOOST_CHRONO_UTILITY_TO_STRING_HPP + +#include +#include +#include + +namespace boost +{ + namespace chrono + { + template + std::basic_string to_basic_string(T const&v) { + std::basic_stringstream sstr; + sstr << v; + return sstr.str(); + } + + template + std::string to_string(T const&v) { + return to_basic_string(v); + } +#ifndef BOOST_NO_STD_WSTRING + template + std::wstring to_wstring(T const&v) { + return to_basic_string(v); + } +#endif +#if BOOST_CHRONO_HAS_UNICODE_SUPPORT + template + std::basic_string to_u16string(T const&v) { + return to_basic_string(v); + } + template + std::basic_string to_u32string(T const&v) { + return to_basic_string(v); + } +#endif + } // chrono + +} // boost + +#endif // header diff --git a/3party/boost/boost/chrono/io_v1/chrono_io.hpp b/3party/boost/boost/chrono/io_v1/chrono_io.hpp index 6ca1ca2d69..daabd49222 100644 --- a/3party/boost/boost/chrono/io_v1/chrono_io.hpp +++ b/3party/boost/boost/chrono/io_v1/chrono_io.hpp @@ -265,59 +265,59 @@ template std::basic_istream& operator>>(std::basic_istream& is, duration& d) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; typedef duration_punct Facet; std::locale loc = is.getloc(); - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; if (!std::has_facet(loc)) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.imbue(std::locale(loc, new Facet)); } - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; loc = is.getloc(); const Facet& f = std::use_facet(loc); typedef typename chrono_detail::duration_io_intermediate::type intermediate_type; intermediate_type r; std::ios_base::iostate err = std::ios_base::goodbit; // read value into r - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is >> r; - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; if (is.good()) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // now determine unit typedef std::istreambuf_iterator in_iterator; in_iterator i(is); in_iterator e; - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; if (i != e && *i == ' ') // mandatory ' ' after value { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; ++i; if (i != e) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // unit is num / den (yet to be determined) unsigned long long num = 0; unsigned long long den = 0; if (*i == '[') { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // parse [N/D]s or [N/D]seconds format ++i; CharT x; is >> num >> x >> den; if (!is.good() || (x != '/')) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.setstate(is.failbit); return is; } i = in_iterator(is); if (*i != ']') { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.setstate(is.failbit); return is; } @@ -328,27 +328,27 @@ operator>>(std::basic_istream& is, duration& d) f.template plural >(), f.template short_name >() }; - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; const std::basic_string* k = chrono_detail::scan_keyword(i, e, units, units + sizeof(units)/sizeof(units[0]), //~ std::use_facet >(loc), err); - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.setstate(err); switch ((k - units) / 3) { case 0: - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; break; default: is.setstate(err); - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; return is; } } else { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // parse SI name, short or long const std::basic_string units[] = { @@ -410,12 +410,12 @@ operator>>(std::basic_istream& is, duration& d) f.template plural >(), f.template short_name >() }; - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; const std::basic_string* k = chrono_detail::scan_keyword(i, e, units, units + sizeof(units)/sizeof(units[0]), //~ std::use_facet >(loc), err); - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; switch ((k - units) / 3) { case 0: @@ -495,12 +495,12 @@ operator>>(std::basic_istream& is, duration& d) den = 1; break; default: - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.setstate(err|is.failbit); return is; } } - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // unit is num/den // r should be multiplied by (num/den) / Period // Reduce (num/den) / Period to lowest terms @@ -513,7 +513,7 @@ operator>>(std::basic_istream& is, duration& d) if (num > (std::numeric_limits::max)() / d2 || den > (std::numeric_limits::max)() / n2) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // (num/den) / Period overflows is.setstate(err|is.failbit); return is; @@ -523,68 +523,68 @@ operator>>(std::basic_istream& is, duration& d) typedef typename common_type::type common_type_t; - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // num / den is now factor to multiply by r if (!chrono_detail::reduce(r, den, err)) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.setstate(err|is.failbit); return is; } //if (r > ((duration_values::max)() / num)) - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; if (chrono::detail::gt(r,((duration_values::max)() / num))) { // Conversion to Period overflowed - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.setstate(err|is.failbit); return is; } - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; common_type_t t = r * num; t /= den; - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; if (t > 0) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; Rep pt = t; if ( (duration_values::max)() < pt) { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // Conversion to Period overflowed is.setstate(err|is.failbit); return is; } } - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // Success! Store it. r = Rep(t); d = duration(r); is.setstate(err); - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; return is; } else { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; is.setstate(is.failbit | is.eofbit); return is; } } else { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; if (i == e) is.setstate(is.failbit|is.eofbit); else is.setstate(is.failbit); - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; return is; } } else { - std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; + //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; //is.setstate(is.failbit); return is; } diff --git a/3party/boost/boost/chrono/time_point.hpp b/3party/boost/boost/chrono/time_point.hpp index 9aad25e66c..7e80b59d19 100644 --- a/3party/boost/boost/chrono/time_point.hpp +++ b/3party/boost/boost/chrono/time_point.hpp @@ -217,12 +217,12 @@ namespace chrono { // special values - static BOOST_CONSTEXPR time_point + static BOOST_CHRONO_LIB_CONSTEXPR time_point min BOOST_PREVENT_MACRO_SUBSTITUTION () { return time_point((duration::min)()); } - static BOOST_CONSTEXPR time_point + static BOOST_CHRONO_LIB_CONSTEXPR time_point max BOOST_PREVENT_MACRO_SUBSTITUTION () { return time_point((duration::max)()); diff --git a/3party/boost/boost/config/compiler/gcc.hpp b/3party/boost/boost/config/compiler/gcc.hpp index f42fd790ca..de8875cdca 100644 --- a/3party/boost/boost/config/compiler/gcc.hpp +++ b/3party/boost/boost/config/compiler/gcc.hpp @@ -184,7 +184,7 @@ # define BOOST_NO_CXX11_DELETED_FUNCTIONS #endif -#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 4) +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) # define BOOST_NO_SFINAE_EXPR #endif diff --git a/3party/boost/boost/container/allocator_traits.hpp b/3party/boost/boost/container/allocator_traits.hpp index 8e537ccf6f..11d948bf34 100644 --- a/3party/boost/boost/container/allocator_traits.hpp +++ b/3party/boost/boost/container/allocator_traits.hpp @@ -70,41 +70,41 @@ struct allocator_traits typedef unspecified pointer; //! Alloc::const_pointer if such a type exists ; otherwise, pointer_traits::rebind::rebind. //! - typedef unspecified void_pointer; + typedef see_documentation void_pointer; //! Alloc::const_void_pointer if such a type exists ; otherwis e, pointer_traits::rebind::difference_type. //! - typedef unspecified difference_type; + typedef see_documentation difference_type; //! Alloc::size_type if such a type exists ; otherwise, make_unsigned::type //! - typedef unspecified size_type; + typedef see_documentation size_type; //! Alloc::propagate_on_container_copy_assignment if such a type exists, otherwise an integral_constant //! type with internal constant static member `value` == false. - typedef unspecified propagate_on_container_copy_assignment; + typedef see_documentation propagate_on_container_copy_assignment; //! Alloc::propagate_on_container_move_assignment if such a type exists, otherwise an integral_constant //! type with internal constant static member `value` == false. - typedef unspecified propagate_on_container_move_assignment; + typedef see_documentation propagate_on_container_move_assignment; //! Alloc::propagate_on_container_swap if such a type exists, otherwise an integral_constant //! type with internal constant static member `value` == false. - typedef unspecified propagate_on_container_swap; + typedef see_documentation propagate_on_container_swap; //! Defines an allocator: Alloc::rebind::other if such a type exists; otherwise, Alloc //! if Alloc is a class template instantiation of the form Alloc, where Args is zero or //! more type arguments ; otherwise, the instantiation of rebind_alloc is ill-formed. //! //! In C++03 compilers `rebind_alloc` is a struct derived from an allocator //! deduced by previously detailed rules. - template using rebind_alloc = unspecified; + template using rebind_alloc = see_documentation; //! In C++03 compilers `rebind_traits` is a struct derived from //! `allocator_traits`, where `OtherAlloc` is @@ -115,7 +115,7 @@ struct allocator_traits //! `type` is an allocator related to Alloc deduced deduced by rules explained in `rebind_alloc`. template struct portable_rebind_alloc - { typedef unspecified_type type; }; + { typedef see_documentation type; }; #else //pointer typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Alloc, diff --git a/3party/boost/boost/container/container_fwd.hpp b/3party/boost/boost/container/container_fwd.hpp index c52b04a1c9..bdefd81e00 100644 --- a/3party/boost/boost/container/container_fwd.hpp +++ b/3party/boost/boost/container/container_fwd.hpp @@ -49,85 +49,85 @@ namespace container { //vector class template > + ,class Allocator = std::allocator > class vector; //vector class template > + ,class Allocator = std::allocator > class stable_vector; //vector class template > + ,class Allocator = std::allocator > class deque; //list class template > + ,class Allocator = std::allocator > class list; //slist class template > + ,class Allocator = std::allocator > class slist; //set class -template - ,class A = std::allocator > +template + ,class Allocator = std::allocator > class set; //multiset class -template - ,class A = std::allocator > +template + ,class Allocator = std::allocator > class multiset; //map class template - ,class A = std::allocator > > + ,class Compare = std::less + ,class Allocator = std::allocator > > class map; //multimap class template - ,class A = std::allocator > > + ,class Compare = std::less + ,class Allocator = std::allocator > > class multimap; //flat_set class -template - ,class A = std::allocator > +template + ,class Allocator = std::allocator > class flat_set; //flat_multiset class -template - ,class A = std::allocator > +template + ,class Allocator = std::allocator > class flat_multiset; //flat_map class template - ,class A = std::allocator > > + ,class Compare = std::less + ,class Allocator = std::allocator > > class flat_map; //flat_multimap class template - ,class A = std::allocator > > + ,class Compare = std::less + ,class Allocator = std::allocator > > class flat_multimap; //basic_string class template - ,class A = std::allocator > + ,class Allocator = std::allocator > class basic_string; //! Type used to tag that the input range is diff --git a/3party/boost/boost/container/deque.hpp b/3party/boost/boost/container/deque.hpp index 6a85ae9486..b63dab3a02 100644 --- a/3party/boost/boost/container/deque.hpp +++ b/3party/boost/boost/container/deque.hpp @@ -67,17 +67,17 @@ namespace container { /// @cond #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template > +template > #else -template +template #endif class deque; -template +template struct deque_value_traits { typedef T value_type; - typedef A allocator_type; + typedef Allocator allocator_type; static const bool trivial_dctr = boost::has_trivial_destructor::value; static const bool trivial_dctr_after_move = false; //::boost::has_trivial_destructor_after_move::value || trivial_dctr; @@ -96,34 +96,34 @@ inline std::size_t deque_buf_size(std::size_t size) // Deque base class. It has two purposes. First, its constructor // and destructor allocate (but don't initialize) storage. This makes // exception safety easier. -template +template class deque_base { BOOST_COPYABLE_AND_MOVABLE(deque_base) public: - typedef allocator_traits val_alloc_traits_type; - typedef typename val_alloc_traits_type::value_type val_alloc_val; - typedef typename val_alloc_traits_type::pointer val_alloc_ptr; - typedef typename val_alloc_traits_type::const_pointer val_alloc_cptr; - typedef typename val_alloc_traits_type::reference val_alloc_ref; - typedef typename val_alloc_traits_type::const_reference val_alloc_cref; - typedef typename val_alloc_traits_type::difference_type val_alloc_diff; - typedef typename val_alloc_traits_type::size_type val_alloc_size; + typedef allocator_traits val_alloc_traits_type; + typedef typename val_alloc_traits_type::value_type val_alloc_val; + typedef typename val_alloc_traits_type::pointer val_alloc_ptr; + typedef typename val_alloc_traits_type::const_pointer val_alloc_cptr; + typedef typename val_alloc_traits_type::reference val_alloc_ref; + typedef typename val_alloc_traits_type::const_reference val_alloc_cref; + typedef typename val_alloc_traits_type::difference_type val_alloc_diff; + typedef typename val_alloc_traits_type::size_type val_alloc_size; typedef typename val_alloc_traits_type::template - portable_rebind_alloc::type ptr_alloc_t; - typedef allocator_traits ptr_alloc_traits_type; + portable_rebind_alloc::type ptr_alloc_t; + typedef allocator_traits ptr_alloc_traits_type; typedef typename ptr_alloc_traits_type::value_type ptr_alloc_val; typedef typename ptr_alloc_traits_type::pointer ptr_alloc_ptr; typedef typename ptr_alloc_traits_type::const_pointer ptr_alloc_cptr; typedef typename ptr_alloc_traits_type::reference ptr_alloc_ref; typedef typename ptr_alloc_traits_type::const_reference ptr_alloc_cref; - typedef A allocator_type; + typedef Allocator allocator_type; typedef allocator_type stored_allocator_type; typedef val_alloc_size size_type; protected: - typedef deque_value_traits traits_t; + typedef deque_value_traits traits_t; typedef ptr_alloc_t map_allocator_type; static size_type s_buffer_size() { return deque_buf_size(sizeof(T)); } @@ -163,7 +163,7 @@ class deque_base // [map, map + map_size) is a valid, non-empty range. // [start.node, finish.node] is a valid range contained within // [map, map + map_size). - // A pointer in the range [map, map + map_size) points to an allocated node + // Allocator pointer in the range [map, map + map_size) points to an allocated node // if and only if the pointer is in the range [start.node, finish.node]. class const_iterator : public std::iterator { public: - static size_type s_buffer_size() { return deque_base::s_buffer_size(); } + static size_type s_buffer_size() { return deque_base::s_buffer_size(); } typedef std::random_access_iterator_tag iterator_category; typedef val_alloc_val value_type; @@ -182,8 +182,8 @@ class deque_base typedef ptr_alloc_ptr index_pointer; typedef const_iterator self_t; - friend class deque; - friend class deque_base; + friend class deque; + friend class deque_base; protected: val_alloc_ptr m_cur; @@ -323,8 +323,8 @@ class deque_base typedef ptr_alloc_ptr index_pointer; typedef const_iterator self_t; - friend class deque; - friend class deque_base; + friend class deque; + friend class deque_base; private: explicit iterator(const const_iterator& x) : const_iterator(x){} @@ -525,307 +525,59 @@ class deque_base //! Deque class //! #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template > +template > #else -template +template #endif -class deque : protected deque_base +class deque : protected deque_base { /// @cond private: - typedef deque_base Base; - typedef typename Base::val_alloc_val val_alloc_val; - typedef typename Base::val_alloc_ptr val_alloc_ptr; - typedef typename Base::val_alloc_cptr val_alloc_cptr; - typedef typename Base::val_alloc_ref val_alloc_ref; - typedef typename Base::val_alloc_cref val_alloc_cref; - typedef typename Base::val_alloc_size val_alloc_size; - typedef typename Base::val_alloc_diff val_alloc_diff; - - typedef typename Base::ptr_alloc_t ptr_alloc_t; - typedef typename Base::ptr_alloc_val ptr_alloc_val; - typedef typename Base::ptr_alloc_ptr ptr_alloc_ptr; - typedef typename Base::ptr_alloc_cptr ptr_alloc_cptr; - typedef typename Base::ptr_alloc_ref ptr_alloc_ref; - typedef typename Base::ptr_alloc_cref ptr_alloc_cref; + typedef deque_base Base; /// @endcond - public: // Basic types - typedef T value_type; - typedef val_alloc_ptr pointer; - typedef val_alloc_cptr const_pointer; - typedef val_alloc_ref reference; - typedef val_alloc_cref const_reference; - typedef val_alloc_size size_type; - typedef val_alloc_diff difference_type; - typedef typename Base::allocator_type allocator_type; + public: - public: // Iterators - typedef typename Base::iterator iterator; - typedef typename Base::const_iterator const_iterator; + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// - typedef std::reverse_iterator const_reverse_iterator; - typedef std::reverse_iterator reverse_iterator; - - typedef allocator_type stored_allocator_type; + typedef T value_type; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef BOOST_CONTAINER_IMPDEF(allocator_type) stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(typename Base::iterator) iterator; + typedef BOOST_CONTAINER_IMPDEF(typename Base::const_iterator) const_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) const_reverse_iterator; /// @cond private: // Internal typedefs BOOST_COPYABLE_AND_MOVABLE(deque) - typedef ptr_alloc_ptr index_pointer; + typedef typename Base::ptr_alloc_ptr index_pointer; static size_type s_buffer_size() { return Base::s_buffer_size(); } typedef container_detail::advanced_insert_aux_int advanced_insert_aux_int_t; typedef repeat_iterator r_iterator; typedef boost::move_iterator move_it; - typedef allocator_traits allocator_traits_type; + typedef allocator_traits allocator_traits_type; /// @endcond public: - - //! Effects: Returns a copy of the internal allocator. - //! - //! Throws: If allocator's copy constructor throws. - //! - //! Complexity: Constant. - allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT - { return Base::alloc(); } - - //! Effects: Returns a reference to the internal allocator. - //! - //! Throws: Nothing - //! - //! Complexity: Constant. - //! - //! Note: Non-standard extension. - const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT - { return Base::alloc(); } - - //! Effects: Returns a reference to the internal allocator. - //! - //! Throws: Nothing - //! - //! Complexity: Constant. - //! - //! Note: Non-standard extension. - stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT - { return Base::alloc(); } - - //! Effects: Returns an iterator to the first element contained in the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - iterator begin() BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_start; } - - //! Effects: Returns an iterator to the end of the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - iterator end() BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_finish; } - - //! Effects: Returns a const_iterator to the first element contained in the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator begin() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_start; } - - //! Effects: Returns a const_iterator to the end of the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator end() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_finish; } - - //! Effects: Returns a reverse_iterator pointing to the beginning - //! of the reversed deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT - { return reverse_iterator(this->members_.m_finish); } - - //! Effects: Returns a reverse_iterator pointing to the end - //! of the reversed deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT - { return reverse_iterator(this->members_.m_start); } - - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT - { return const_reverse_iterator(this->members_.m_finish); } - - //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT - { return const_reverse_iterator(this->members_.m_start); } - - //! Effects: Returns a const_iterator to the first element contained in the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_start; } - - //! Effects: Returns a const_iterator to the end of the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cend() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_finish; } - - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT - { return const_reverse_iterator(this->members_.m_finish); } - - //! Effects: Returns a const_reverse_iterator pointing to the end - //! of the reversed deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT - { return const_reverse_iterator(this->members_.m_start); } - - //! Requires: size() > n. - //! - //! Effects: Returns a reference to the nth element - //! from the beginning of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_start[difference_type(n)]; } - - //! Requires: size() > n. - //! - //! Effects: Returns a const reference to the nth element - //! from the beginning of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_start[difference_type(n)]; } - - //! Requires: size() > n. - //! - //! Effects: Returns a reference to the nth element - //! from the beginning of the container. - //! - //! Throws: std::range_error if n >= size() - //! - //! Complexity: Constant. - reference at(size_type n) - { this->priv_range_check(n); return (*this)[n]; } - - //! Requires: size() > n. - //! - //! Effects: Returns a const reference to the nth element - //! from the beginning of the container. - //! - //! Throws: std::range_error if n >= size() - //! - //! Complexity: Constant. - const_reference at(size_type n) const - { this->priv_range_check(n); return (*this)[n]; } - - //! Requires: !empty() - //! - //! Effects: Returns a reference to the first - //! element of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reference front() BOOST_CONTAINER_NOEXCEPT - { return *this->members_.m_start; } - - //! Requires: !empty() - //! - //! Effects: Returns a const reference to the first element - //! from the beginning of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reference front() const BOOST_CONTAINER_NOEXCEPT - { return *this->members_.m_start; } - - //! Requires: !empty() - //! - //! Effects: Returns a reference to the last - //! element of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reference back() BOOST_CONTAINER_NOEXCEPT - { return *(end()-1); } - - //! Requires: !empty() - //! - //! Effects: Returns a const reference to the last - //! element of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reference back() const BOOST_CONTAINER_NOEXCEPT - { return *(cend()-1); } - - //! Effects: Returns the number of the elements contained in the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type size() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_finish - this->members_.m_start; } - - //! Effects: Returns the largest possible size of the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type max_size() const BOOST_CONTAINER_NOEXCEPT - { return allocator_traits_type::max_size(this->alloc()); } - - //! Effects: Returns true if the deque contains no elements. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - bool empty() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_finish == this->members_.m_start; } + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructors a deque. //! @@ -855,7 +607,7 @@ class deque : protected deque_base explicit deque(size_type n) : Base(n, allocator_type()) { - container_detail::default_construct_aux_proxy proxy(this->alloc(), n); + container_detail::default_construct_aux_proxy proxy(this->alloc(), n); proxy.uninitialized_copy_remaining_to(this->begin()); //deque_base will deallocate in case of exception... } @@ -872,6 +624,27 @@ class deque : protected deque_base : Base(n, a) { this->priv_fill_initialize(value); } + //! Effects: Constructs a deque that will use a copy of allocator a + //! and inserts a copy of the range [first, last) in the deque. + //! + //! Throws: If allocator_type's default constructor or copy constructor + //! throws or T's constructor taking an dereferenced InIt throws. + //! + //! Complexity: Linear to the range [first, last). + template + deque(InIt first, InIt last, const allocator_type& a = allocator_type() + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + >::type * = 0 + #endif + ) + : Base(a) + { + typedef typename std::iterator_traits::iterator_category ItCat; + this->priv_range_initialize(first, last, ItCat()); + } + //! Effects: Copy constructs a deque. //! //! Postcondition: x == *this. @@ -936,23 +709,6 @@ class deque : protected deque_base } } - //! Effects: Constructs a deque that will use a copy of allocator a - //! and inserts a copy of the range [first, last) in the deque. - //! - //! Throws: If allocator_type's default constructor or copy constructor - //! throws or T's constructor taking an dereferenced InIt throws. - //! - //! Complexity: Linear to the range [first, last). - template - deque(InpIt first, InpIt last, const allocator_type& a = allocator_type()) - : Base(a) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_initialize_dispatch(first, last, Result()); - } - //! Effects: Destroys the deque. All stored values are destroyed //! and used memory is deallocated. //! @@ -1024,195 +780,385 @@ class deque : protected deque_base return *this; } - //! Effects: Swaps the contents of *this and x. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - void swap(deque &x) - { - this->swap_members(x); - container_detail::bool_ flag; - container_detail::swap_alloc(this->alloc(), x.alloc(), flag); - container_detail::swap_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); - } - //! Effects: Assigns the n copies of val to *this. //! //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to n. void assign(size_type n, const T& val) - { this->priv_fill_assign(n, val); } + { + typedef constant_iterator c_it; + this->assign(c_it(val, n), c_it()); + } //! Effects: Assigns the the range [first, last) to *this. //! //! Throws: If memory allocation throws or - //! T's constructor from dereferencing InpIt throws. + //! T's constructor from dereferencing InIt throws. //! //! Complexity: Linear to n. - template - void assign(InpIt first, InpIt last) + template + void assign(InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_assign_dispatch(first, last, Result()); - } - - #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts a copy of x at the end of the deque. - //! - //! Throws: If memory allocation throws or - //! T's copy constructor throws. - //! - //! Complexity: Amortized constant time. - void push_back(const T &x); - - //! Effects: Constructs a new element in the end of the deque - //! and moves the resources of mx to this new element. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Amortized constant time. - void push_back(T &&x); - #else - BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) - #endif - - #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts a copy of x at the front of the deque. - //! - //! Throws: If memory allocation throws or - //! T's copy constructor throws. - //! - //! Complexity: Amortized constant time. - void push_front(const T &x); - - //! Effects: Constructs a new element in the front of the deque - //! and moves the resources of mx to this new element. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Amortized constant time. - void push_front(T &&x); - #else - BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front) - #endif - - //! Effects: Removes the last element from the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant time. - void pop_back() BOOST_CONTAINER_NOEXCEPT - { - if (this->members_.m_finish.m_cur != this->members_.m_finish.m_first) { - --this->members_.m_finish.m_cur; - allocator_traits_type::destroy - ( this->alloc() - , container_detail::to_raw_pointer(this->members_.m_finish.m_cur) - ); + iterator cur = this->begin(); + for ( ; first != last && cur != end(); ++cur, ++first){ + *cur = *first; } - else - this->priv_pop_back_aux(); - } - - //! Effects: Removes the first element from the deque. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant time. - void pop_front() BOOST_CONTAINER_NOEXCEPT - { - if (this->members_.m_start.m_cur != this->members_.m_start.m_last - 1) { - allocator_traits_type::destroy - ( this->alloc() - , container_detail::to_raw_pointer(this->members_.m_start.m_cur) - ); - ++this->members_.m_start.m_cur; - } - else - this->priv_pop_front_aux(); - } - - #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Insert a copy of x before position. - //! - //! Throws: If memory allocation throws or x's copy constructor throws. - //! - //! Complexity: If position is end(), amortized constant time - //! Linear time otherwise. - iterator insert(const_iterator position, const T &x); - - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Insert a new element before position with mx's resources. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: If position is end(), amortized constant time - //! Linear time otherwise. - iterator insert(const_iterator position, T &&x); - #else - BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) - #endif - - //! Requires: pos must be a valid iterator of *this. - //! - //! Effects: Insert n copies of x before pos. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n. - void insert(const_iterator pos, size_type n, const value_type& x) - { this->priv_fill_insert(pos, n, x); } - - //! Requires: pos must be a valid iterator of *this. - //! - //! Effects: Insert a copy of the [first, last) range before pos. - //! - //! Throws: If memory allocation throws, T's constructor from a - //! dereferenced InpIt throws or T's copy constructor throws. - //! - //! Complexity: Linear to std::distance [first, last). - template - void insert(const_iterator pos, InpIt first, InpIt last) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_insert_dispatch(pos, first, last, Result()); - } - - #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the end of the deque. - //! - //! Throws: If memory allocation throws or the in-place constructor throws. - //! - //! Complexity: Amortized constant time - template - void emplace_back(Args&&... args) - { - if(this->priv_push_back_simple_available()){ - allocator_traits_type::construct - ( this->alloc() - , this->priv_push_back_simple_pos() - , boost::forward(args)...); - this->priv_push_back_simple_commit(); + if (first == last){ + this->erase(cur, this->cend()); } else{ - typedef container_detail::advanced_insert_aux_non_movable_emplace type; - type &&proxy = type(this->alloc(), boost::forward(args)...); - this->priv_insert_back_aux_impl(1, proxy); + this->insert(this->cend(), first, last); } } + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + void assign(FwdIt first, FwdIt last + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !container_detail::is_input_iterator::value + >::type * = 0 + ) + { + const size_type len = std::distance(first, last); + if (len > size()) { + FwdIt mid = first; + std::advance(mid, this->size()); + boost::copy_or_move(first, mid, begin()); + this->insert(this->cend(), mid, last); + } + else{ + this->erase(boost::copy_or_move(first, last, this->begin()), cend()); + } + } + #endif + + //! Effects: Returns a copy of the internal allocator. + //! + //! Throws: If allocator's copy constructor throws. + //! + //! Complexity: Constant. + allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT + { return Base::alloc(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT + { return Base::alloc(); } + + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT + { return Base::alloc(); } + + //! Effects: Returns an iterator to the first element contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator begin() BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start; } + + //! Effects: Returns a const_iterator to the first element contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator begin() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start; } + + //! Effects: Returns an iterator to the end of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + iterator end() BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish; } + + //! Effects: Returns a const_iterator to the end of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator end() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish; } + + //! Effects: Returns a reverse_iterator pointing to the beginning + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT + { return reverse_iterator(this->members_.m_finish); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_finish); } + + //! Effects: Returns a reverse_iterator pointing to the end + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT + { return reverse_iterator(this->members_.m_start); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_start); } + + //! Effects: Returns a const_iterator to the first element contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start; } + + //! Effects: Returns a const_iterator to the end of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish; } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_finish); } + + //! Effects: Returns a const_reverse_iterator pointing to the end + //! of the reversed deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT + { return const_reverse_iterator(this->members_.m_start); } + + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + + //! Effects: Returns true if the deque contains no elements. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + bool empty() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish == this->members_.m_start; } + + //! Effects: Returns the number of the elements contained in the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type size() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_finish - this->members_.m_start; } + + //! Effects: Returns the largest possible size of the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type max_size() const BOOST_CONTAINER_NOEXCEPT + { return allocator_traits_type::max_size(this->alloc()); } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are default constructed. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size) + { + const size_type len = size(); + if (new_size < len) + this->priv_erase_last_n(len - new_size); + else{ + const size_type n = new_size - this->size(); + container_detail::default_construct_aux_proxy proxy(this->alloc(), n); + priv_insert_back_aux_impl(n, proxy); + } + } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size, const value_type& x) + { + const size_type len = size(); + if (new_size < len) + this->erase(this->members_.m_start + new_size, this->members_.m_finish); + else + this->insert(this->members_.m_finish, new_size - len, x); + } + + //! Effects: Tries to deallocate the excess of memory created + //! with previous allocations. The size of the deque is unchanged + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Constant. + void shrink_to_fit() + { + //This deque implementation already + //deallocates excess nodes when erasing + //so there is nothing to do except for + //empty deque + if(this->empty()){ + this->priv_clear_map(); + } + } + + ////////////////////////////////////////////// + // + // element access + // + ////////////////////////////////////////////// + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the first + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference front() BOOST_CONTAINER_NOEXCEPT + { return *this->members_.m_start; } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the first element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference front() const BOOST_CONTAINER_NOEXCEPT + { return *this->members_.m_start; } + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference back() BOOST_CONTAINER_NOEXCEPT + { return *(end()-1); } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference back() const BOOST_CONTAINER_NOEXCEPT + { return *(cend()-1); } + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start[difference_type(n)]; } + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_start[difference_type(n)]; } + + //! Requires: size() > n. + //! + //! Effects: Returns a reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + reference at(size_type n) + { this->priv_range_check(n); return (*this)[n]; } + + //! Requires: size() > n. + //! + //! Effects: Returns a const reference to the nth element + //! from the beginning of the container. + //! + //! Throws: std::range_error if n >= size() + //! + //! Complexity: Constant. + const_reference at(size_type n) const + { this->priv_range_check(n); return (*this)[n]; } + + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// + + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the beginning of the deque. //! @@ -1230,12 +1176,35 @@ class deque : protected deque_base this->priv_push_front_simple_commit(); } else{ - typedef container_detail::advanced_insert_aux_non_movable_emplace type; + typedef container_detail::advanced_insert_aux_non_movable_emplace type; type &&proxy = type(this->alloc(), boost::forward(args)...); this->priv_insert_front_aux_impl(1, proxy); } } + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... in the end of the deque. + //! + //! Throws: If memory allocation throws or the in-place constructor throws. + //! + //! Complexity: Amortized constant time + template + void emplace_back(Args&&... args) + { + if(this->priv_push_back_simple_available()){ + allocator_traits_type::construct + ( this->alloc() + , this->priv_push_back_simple_pos() + , boost::forward(args)...); + this->priv_push_back_simple_commit(); + } + else{ + typedef container_detail::advanced_insert_aux_non_movable_emplace type; + type &&proxy = type(this->alloc(), boost::forward(args)...); + this->priv_insert_back_aux_impl(1, proxy); + } + } + //! Requires: position must be a valid iterator of *this. //! //! Effects: Inserts an object of type T constructed with @@ -1257,11 +1226,9 @@ class deque : protected deque_base return (this->end()-1); } else{ - size_type n = p - this->cbegin(); - typedef container_detail::advanced_insert_aux_emplace type; + typedef container_detail::advanced_insert_aux_emplace type; type &&proxy = type(this->alloc(), boost::forward(args)...); - this->priv_insert_aux_impl(p, 1, proxy); - return iterator(this->begin() + n); + return this->priv_insert_aux_impl(p, 1, proxy); } } @@ -1269,25 +1236,6 @@ class deque : protected deque_base //advanced_insert_int.hpp includes all necessary preprocessor machinery... #define BOOST_PP_LOCAL_MACRO(n) \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { \ - if(priv_push_back_simple_available()){ \ - allocator_traits_type::construct \ - ( this->alloc() \ - , this->priv_push_back_simple_pos() \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ - priv_push_back_simple_commit(); \ - } \ - else{ \ - container_detail::BOOST_PP_CAT(BOOST_PP_CAT( \ - advanced_insert_aux_non_movable_emplace, n), arg) \ - proxy \ - (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ - priv_insert_back_aux_impl(1, proxy); \ - } \ - } \ - \ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, > ) \ void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ @@ -1301,13 +1249,32 @@ class deque : protected deque_base else{ \ container_detail::BOOST_PP_CAT(BOOST_PP_CAT \ (advanced_insert_aux_non_movable_emplace, n), arg) \ - proxy \ + proxy \ (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ priv_insert_front_aux_impl(1, proxy); \ } \ } \ \ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + if(priv_push_back_simple_available()){ \ + allocator_traits_type::construct \ + ( this->alloc() \ + , this->priv_push_back_simple_pos() \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + priv_push_back_simple_commit(); \ + } \ + else{ \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT( \ + advanced_insert_aux_non_movable_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + priv_insert_back_aux_impl(1, proxy); \ + } \ + } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ iterator emplace(const_iterator p \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ @@ -1320,12 +1287,10 @@ class deque : protected deque_base return (this->end()-1); \ } \ else{ \ - size_type pos_num = p - this->cbegin(); \ container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - proxy \ + proxy \ (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ - this->priv_insert_aux_impl(p, 1, proxy); \ - return iterator(this->begin() + pos_num); \ + return this->priv_insert_aux_impl(p, 1, proxy); \ } \ } \ //! @@ -1334,37 +1299,170 @@ class deque : protected deque_base #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are copy constructed from x. + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the front of the deque. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Throws: If memory allocation throws or + //! T's copy constructor throws. //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size, const value_type& x) + //! Complexity: Amortized constant time. + void push_front(const T &x); + + //! Effects: Constructs a new element in the front of the deque + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_front(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the end of the deque. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_back(const T &x); + + //! Effects: Constructs a new element in the end of the deque + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_back(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a copy of x before position. + //! + //! Returns: an iterator to the inserted element. + //! + //! Throws: If memory allocation throws or x's copy constructor throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, const T &x); + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a new element before position with mx's resources. + //! + //! Returns: an iterator to the inserted element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) + #endif + + //! Requires: pos must be a valid iterator of *this. + //! + //! Effects: Insert n copies of x before pos. + //! + //! Returns: an iterator to the first inserted element or pos if n is 0. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + iterator insert(const_iterator pos, size_type n, const value_type& x) { - const size_type len = size(); - if (new_size < len) - this->erase(this->members_.m_start + new_size, this->members_.m_finish); - else - this->insert(this->members_.m_finish, new_size - len, x); + typedef constant_iterator c_it; + return this->insert(pos, c_it(x, n), c_it()); } - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are default constructed. + //! Requires: pos must be a valid iterator of *this. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Effects: Insert a copy of the [first, last) range before pos. //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size) + //! Returns: an iterator to the first inserted element or pos if first == last. + //! + //! Throws: If memory allocation throws, T's constructor from a + //! dereferenced InIt throws or T's copy constructor throws. + //! + //! Complexity: Linear to std::distance [first, last). + template + iterator insert(const_iterator pos, InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) { - const size_type len = size(); - if (new_size < len) - this->priv_erase_last_n(len - new_size); - else{ - size_type n = new_size - this->size(); - container_detail::default_construct_aux_proxy proxy(this->alloc(), n); - priv_insert_back_aux_impl(n, proxy); + size_type n = 0; + iterator it(pos); + for(;first != last; ++first, ++n){ + it = this->emplace(it, *first); + ++it; } + it -= n; + return it; + } + + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + iterator insert(const_iterator p, FwdIt first, FwdIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) + { + container_detail::advanced_insert_aux_proxy proxy(this->alloc(), first, last); + return priv_insert_aux_impl(p, (size_type)std::distance(first, last), proxy); + } + #endif + + //! Effects: Removes the first element from the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant time. + void pop_front() BOOST_CONTAINER_NOEXCEPT + { + if (this->members_.m_start.m_cur != this->members_.m_start.m_last - 1) { + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(this->members_.m_start.m_cur) + ); + ++this->members_.m_start.m_cur; + } + else + this->priv_pop_front_aux(); + } + + //! Effects: Removes the last element from the deque. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant time. + void pop_back() BOOST_CONTAINER_NOEXCEPT + { + if (this->members_.m_finish.m_cur != this->members_.m_finish.m_first) { + --this->members_.m_finish.m_cur; + allocator_traits_type::destroy + ( this->alloc() + , container_detail::to_raw_pointer(this->members_.m_finish.m_cur) + ); + } + else + this->priv_pop_back_aux(); } //! Effects: Erases the element at position pos. @@ -1428,18 +1526,17 @@ class deque : protected deque_base } } - void priv_erase_last_n(size_type n) + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(deque &x) { - if(n == this->size()) { - this->clear(); - } - else { - iterator new_finish = this->members_.m_finish - n; - if(!Base::traits_t::trivial_dctr_after_move) - this->priv_destroy_range(new_finish, this->members_.m_finish); - this->priv_destroy_nodes(new_finish.m_node + 1, this->members_.m_finish.m_node + 1); - this->members_.m_finish = new_finish; - } + this->swap_members(x); + container_detail::bool_ flag; + container_detail::swap_alloc(this->alloc(), x.alloc(), flag); + container_detail::swap_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); } //! Effects: Erases all the elements of the deque. @@ -1467,25 +1564,23 @@ class deque : protected deque_base this->members_.m_finish = this->members_.m_start; } - //! Effects: Tries to deallocate the excess of memory created - //! with previous allocations. The size of the deque is unchanged - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Constant. - void shrink_to_fit() + /// @cond + private: + + void priv_erase_last_n(size_type n) { - //This deque implementation already - //deallocates excess nodes when erasing - //so there is nothing to do except for - //empty deque - if(this->empty()){ - this->priv_clear_map(); + if(n == this->size()) { + this->clear(); + } + else { + iterator new_finish = this->members_.m_finish - n; + if(!Base::traits_t::trivial_dctr_after_move) + this->priv_destroy_range(new_finish, this->members_.m_finish); + this->priv_destroy_nodes(new_finish.m_node + 1, this->members_.m_finish.m_node + 1); + this->members_.m_finish = new_finish; } } - /// @cond - private: void priv_range_check(size_type n) const { if (n >= this->size()) BOOST_RETHROW std::out_of_range("deque"); } @@ -1500,9 +1595,7 @@ class deque : protected deque_base return (end()-1); } else { - size_type n = position - cbegin(); - this->priv_insert_aux(position, size_type(1), x); - return iterator(this->begin() + n); + return this->insert(position, size_type(1), x); } } @@ -1517,10 +1610,7 @@ class deque : protected deque_base return(end()-1); } else { - //Just call more general insert(pos, size, value) and return iterator - size_type n = position - begin(); - this->priv_insert_aux(position, move_it(r_iterator(mx, 1)), move_it(r_iterator())); - return iterator(this->begin() + n); + return this->insert(position, move_it(r_iterator(mx, 1)), move_it(r_iterator())); } } @@ -1532,7 +1622,7 @@ class deque : protected deque_base this->priv_push_front_simple_commit(); } else{ - this->priv_insert_aux(cbegin(), size_type(1), t); + this->insert(cbegin(), size_type(1), t); } } @@ -1544,7 +1634,7 @@ class deque : protected deque_base this->priv_push_front_simple_commit(); } else{ - this->priv_insert_aux(cbegin(), move_it(r_iterator(t, 1)), move_it(r_iterator())); + this->insert(cbegin(), move_it(r_iterator(t, 1)), move_it(r_iterator())); } } @@ -1556,7 +1646,7 @@ class deque : protected deque_base this->priv_push_back_simple_commit(); } else{ - this->priv_insert_aux(cend(), size_type(1), t); + this->insert(cend(), size_type(1), t); } } @@ -1568,7 +1658,7 @@ class deque : protected deque_base this->priv_push_back_simple_commit(); } else{ - this->priv_insert_aux(cend(), move_it(r_iterator(t, 1)), move_it(r_iterator())); + this->insert(cend(), move_it(r_iterator(t, 1)), move_it(r_iterator())); } } @@ -1600,48 +1690,6 @@ class deque : protected deque_base void priv_push_front_simple_commit() { --this->members_.m_start.m_cur; } - template - void priv_insert_aux(const_iterator pos, InpIt first, InpIt last, std::input_iterator_tag) - { - for(;first != last; ++first){ - this->insert(pos, boost::move(value_type(*first))); - } - } - - template - void priv_insert_aux(const_iterator pos, FwdIt first, FwdIt last, std::forward_iterator_tag) - { this->priv_insert_aux(pos, first, last); } - - // assign(), a generalized assignment member function. Two - // versions: one that takes a count, and one that takes a range. - // The range version is a member template, so we dispatch on whether - // or not the type is an integer. - void priv_fill_assign(size_type n, const T& val) - { - if (n > size()) { - std::fill(begin(), end(), val); - this->insert(cend(), n - size(), val); - } - else { - this->erase(cbegin() + n, cend()); - std::fill(begin(), end(), val); - } - } - - template - void priv_initialize_dispatch(Integer n, Integer x, container_detail::true_) - { - this->priv_initialize_map(n); - this->priv_fill_initialize(x); - } - - template - void priv_initialize_dispatch(InpIt first, InpIt last, container_detail::false_) - { - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_range_initialize(first, last, ItCat()); - } - void priv_destroy_range(iterator p, iterator p2) { for(;p != p2; ++p){ @@ -1662,71 +1710,10 @@ class deque : protected deque_base } } - template - void priv_assign_dispatch(Integer n, Integer val, container_detail::true_) - { this->priv_fill_assign((size_type) n, (value_type)val); } - - template - void priv_assign_dispatch(InpIt first, InpIt last, container_detail::false_) - { - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_assign_aux(first, last, ItCat()); - } - - template - void priv_assign_aux(InpIt first, InpIt last, std::input_iterator_tag) - { - iterator cur = begin(); - for ( ; first != last && cur != end(); ++cur, ++first) - *cur = *first; - if (first == last) - this->erase(cur, cend()); - else - this->insert(cend(), first, last); - } - - template - void priv_assign_aux(FwdIt first, FwdIt last, std::forward_iterator_tag) - { - size_type len = std::distance(first, last); - if (len > size()) { - FwdIt mid = first; - std::advance(mid, size()); - boost::copy_or_move(first, mid, begin()); - this->insert(cend(), mid, last); - } - else - this->erase(boost::copy_or_move(first, last, begin()), cend()); - } - - template - void priv_insert_dispatch(const_iterator pos, Integer n, Integer x, container_detail::true_) - { this->priv_fill_insert(pos, (size_type) n, (value_type)x); } - - template - void priv_insert_dispatch(const_iterator pos,InpIt first, InpIt last, container_detail::false_) - { - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_insert_aux(pos, first, last, ItCat()); - } - - void priv_insert_aux(const_iterator pos, size_type n, const value_type& x) - { - typedef constant_iterator c_it; - this->priv_insert_aux(pos, c_it(x, n), c_it()); - } - - //Just forward all operations to priv_insert_aux_impl - template - void priv_insert_aux(const_iterator p, FwdIt first, FwdIt last) - { - container_detail::advanced_insert_aux_proxy proxy(this->alloc(), first, last); - priv_insert_aux_impl(p, (size_type)std::distance(first, last), proxy); - } - - void priv_insert_aux_impl(const_iterator p, size_type n, advanced_insert_aux_int_t &interf) + iterator priv_insert_aux_impl(const_iterator p, size_type n, advanced_insert_aux_int_t &interf) { iterator pos(p); + const size_type pos_n = p - this->cbegin(); if(!this->members_.m_map){ this->priv_initialize_map(0); pos = this->begin(); @@ -1780,9 +1767,10 @@ class deque : protected deque_base interf.copy_remaining_to(pos); } } + return this->begin() + pos_n; } - void priv_insert_back_aux_impl(size_type n, advanced_insert_aux_int_t &interf) + iterator priv_insert_back_aux_impl(size_type n, advanced_insert_aux_int_t &interf) { if(!this->members_.m_map){ this->priv_initialize_map(0); @@ -1792,9 +1780,10 @@ class deque : protected deque_base iterator old_finish = this->members_.m_finish; interf.uninitialized_copy_some_and_update(old_finish, n, true); this->members_.m_finish = new_finish; + return iterator(this->members_.m_finish - n); } - void priv_insert_front_aux_impl(size_type n, advanced_insert_aux_int_t &interf) + iterator priv_insert_front_aux_impl(size_type n, advanced_insert_aux_int_t &interf) { if(!this->members_.m_map){ this->priv_initialize_map(0); @@ -1803,13 +1792,13 @@ class deque : protected deque_base iterator new_start = this->priv_reserve_elements_at_front(n); interf.uninitialized_copy_some_and_update(new_start, difference_type(n), true); this->members_.m_start = new_start; + return new_start; } - - void priv_fill_insert(const_iterator pos, size_type n, const value_type& x) + iterator priv_fill_insert(const_iterator pos, size_type n, const value_type& x) { typedef constant_iterator c_it; - this->insert(pos, c_it(x, n), c_it()); + return this->insert(pos, c_it(x, n), c_it()); } // Precondition: this->members_.m_start and this->members_.m_finish have already been initialized, @@ -1832,13 +1821,13 @@ class deque : protected deque_base BOOST_CATCH_END } - template - void priv_range_initialize(InpIt first, InpIt last, std::input_iterator_tag) + template + void priv_range_initialize(InIt first, InIt last, std::input_iterator_tag) { this->priv_initialize_map(0); BOOST_TRY { for ( ; first != last; ++first) - this->push_back(*first); + this->emplace_back(*first); } BOOST_CATCH(...){ this->clear(); @@ -1989,43 +1978,36 @@ class deque : protected deque_base }; // Nonmember functions. -template -inline bool operator==(const deque& x, - const deque& y) +template +inline bool operator==(const deque& x, const deque& y) { return x.size() == y.size() && equal(x.begin(), x.end(), y.begin()); } -template -inline bool operator<(const deque& x, - const deque& y) +template +inline bool operator<(const deque& x, const deque& y) { return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); } -template -inline bool operator!=(const deque& x, - const deque& y) +template +inline bool operator!=(const deque& x, const deque& y) { return !(x == y); } -template -inline bool operator>(const deque& x, - const deque& y) +template +inline bool operator>(const deque& x, const deque& y) { return y < x; } -template -inline bool operator<=(const deque& x, - const deque& y) - { return !(y < x); } - -template -inline bool operator>=(const deque& x, - const deque& y) +template +inline bool operator>=(const deque& x, const deque& y) { return !(x < y); } +template +inline bool operator<=(const deque& x, const deque& y) + { return !(y < x); } -template -inline void swap(deque& x, deque& y) +template +inline void swap(deque& x, deque& y) { x.swap(y); } }} @@ -2036,10 +2018,10 @@ namespace boost { /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - enum { value = has_trivial_destructor::value }; + enum { value = has_trivial_destructor::value }; }; */ } diff --git a/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp b/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp index afba6b5f1b..39b9942ead 100644 --- a/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp +++ b/3party/boost/boost/container/detail/adaptive_node_pool_impl.hpp @@ -348,8 +348,7 @@ class private_adaptive_node_pool_impl { block_iterator block_it(m_block_multiset.end()); while(n--){ - void *pElem = container_detail::to_raw_pointer(chain.front()); - chain.pop_front(); + void *pElem = container_detail::to_raw_pointer(chain.pop_front()); priv_invariants(); block_info_t *block_info = this->priv_block_from_node(pElem); BOOST_ASSERT(block_info->free_nodes.size() < m_real_num_node); diff --git a/3party/boost/boost/container/detail/advanced_insert_int.hpp b/3party/boost/boost/container/detail/advanced_insert_int.hpp index a97af282e0..e7adcd2c22 100644 --- a/3party/boost/boost/container/detail/advanced_insert_int.hpp +++ b/3party/boost/boost/container/detail/advanced_insert_int.hpp @@ -173,7 +173,6 @@ struct default_construct_aux_proxy #ifdef BOOST_CONTAINER_PERFECT_FORWARDING #include -#include #include #include //#include //For debugging purposes @@ -227,8 +226,7 @@ struct advanced_insert_aux_non_movable_emplace if(!this->used_){ alloc_traits::construct( this->a_ , container_detail::to_raw_pointer(&*p) - , ::boost::container::container_detail:: - stored_ref::forward(get(this->args_))... + , ::boost::forward(get(this->args_))... ); this->used_ = true; } @@ -241,8 +239,7 @@ struct advanced_insert_aux_non_movable_emplace if(!this->used_){ alloc_traits::construct( this->a_ , container_detail::to_raw_pointer(&*p) - , ::boost::container::container_detail:: - stored_ref::forward(get(this->args_))... + , ::boost::forward(get(this->args_))... ); this->used_ = true; } @@ -288,7 +285,7 @@ struct advanced_insert_aux_emplace aligned_storage::value> v; value_type *vp = static_cast(static_cast(&v)); alloc_traits::construct(this->a_, vp, - ::boost::container::container_detail::stored_ref::forward(get(this->args_))...); + ::boost::forward(get(this->args_))...); scoped_destructor d(this->a_, vp); *p = ::boost::move(*vp); d.release(); @@ -305,7 +302,7 @@ struct advanced_insert_aux_emplace aligned_storage::value> v; value_type *vp = static_cast(static_cast(&v)); alloc_traits::construct(this->a_, vp, - ::boost::container::container_detail::stored_ref::forward(get(this->args_))...); + ::boost::forward(get(this->args_))...); try { *p = ::boost::move(*vp); } catch (...) { @@ -413,7 +410,7 @@ struct BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) alloc_traits::construct(this->a_, vp \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_MEMBER_FORWARD, _)); \ scoped_destructor d(this->a_, vp); \ - *p = ::boost::move(*vp); \ + *p = ::boost::move(*vp); \ d.release(); \ this->used_ = true; \ } \ @@ -430,7 +427,7 @@ struct BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) alloc_traits::construct(this->a_, vp \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_MEMBER_FORWARD, _)); \ scoped_destructor d(this->a_, vp); \ - *p = ::boost::move(*vp); \ + *p = ::boost::move(*vp); \ d.release(); \ this->used_ = true; \ } \ diff --git a/3party/boost/boost/container/detail/algorithms.hpp b/3party/boost/boost/container/detail/algorithms.hpp index dc09575b24..824e44b90d 100644 --- a/3party/boost/boost/container/detail/algorithms.hpp +++ b/3party/boost/boost/container/detail/algorithms.hpp @@ -34,6 +34,30 @@ namespace boost { namespace container { +template +struct is_default_construct_iterator +{ + static const bool value = false; +}; + +template +struct is_default_construct_iterator > +{ + static const bool value = true; +}; + +template +struct is_emplace_iterator +{ + static const bool value = false; +}; + +template +struct is_emplace_iterator > +{ + static const bool value = true; +}; + template inline void construct_in_place(A &a, T* dest, InpIt source) { boost::container::allocator_traits::construct(a, dest, *source); } diff --git a/3party/boost/boost/container/detail/destroyers.hpp b/3party/boost/boost/container/detail/destroyers.hpp index d1b118cdcc..befae3fdf2 100644 --- a/3party/boost/boost/container/detail/destroyers.hpp +++ b/3party/boost/boost/container/detail/destroyers.hpp @@ -27,6 +27,68 @@ namespace boost { namespace container { namespace container_detail { +//!A deleter for scoped_ptr that deallocates the memory +//!allocated for an object using a STL allocator. +template +struct scoped_deallocator +{ + typedef allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::pointer pointer; + typedef container_detail::integral_constant::value> alloc_version; + typedef container_detail::integral_constant allocator_v1; + typedef container_detail::integral_constant allocator_v2; + + private: + void priv_deallocate(allocator_v1) + { m_alloc.deallocate(m_ptr, 1); } + + void priv_deallocate(allocator_v2) + { m_alloc.deallocate_one(m_ptr); } + + BOOST_MOVABLE_BUT_NOT_COPYABLE(scoped_deallocator) + + public: + + pointer m_ptr; + A& m_alloc; + + scoped_deallocator(pointer p, A& a) + : m_ptr(p), m_alloc(a) + {} + + ~scoped_deallocator() + { if (m_ptr)priv_deallocate(alloc_version()); } + + scoped_deallocator(BOOST_RV_REF(scoped_deallocator) o) + : m_ptr(o.m_ptr), m_alloc(o.m_alloc) + { o.release(); } + + pointer get() const + { return m_ptr; } + + void release() + { m_ptr = 0; } +}; + +template +struct null_scoped_deallocator +{ + typedef boost::container::allocator_traits AllocTraits; + typedef typename AllocTraits::pointer pointer; + typedef typename AllocTraits::size_type size_type; + + null_scoped_deallocator(pointer, Allocator&, size_type) + {} + + void release() + {} + + pointer get() const + { return pointer(); } +}; + //!A deleter for scoped_ptr that deallocates the memory //!allocated for an array of objects using a STL allocator. template @@ -239,10 +301,57 @@ class allocator_destroyer void operator()(const pointer &p) { AllocTraits::destroy(a_, container_detail::to_raw_pointer(p)); - priv_deallocate(p, alloc_version()); + this->priv_deallocate(p, alloc_version()); } }; +template +class allocator_destroyer_and_chain_builder +{ + typedef allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::value_type value_type; + typedef typename A::multiallocation_chain multiallocation_chain; + + A & a_; + multiallocation_chain &c_; + + public: + allocator_destroyer_and_chain_builder(A &a, multiallocation_chain &c) + : a_(a), c_(c) + {} + + void operator()(const typename A::pointer &p) + { + allocator_traits::destroy(a_, container_detail::to_raw_pointer(p)); + c_.push_front(p); + } +}; + +template +class allocator_multialloc_chain_node_deallocator +{ + typedef allocator_traits allocator_traits_type; + typedef typename allocator_traits_type::value_type value_type; + typedef typename A::multiallocation_chain multiallocation_chain; + typedef allocator_destroyer_and_chain_builder chain_builder; + + A & a_; + multiallocation_chain c_; + + public: + allocator_multialloc_chain_node_deallocator(A &a) + : a_(a), c_() + {} + + chain_builder get_chain_builder() + { return chain_builder(a_, c_); } + + ~allocator_multialloc_chain_node_deallocator() + { + if(!c_.empty()) + a_.deallocate_individual(boost::move(c_)); + } +}; } //namespace container_detail { } //namespace container { diff --git a/3party/boost/boost/container/detail/flat_tree.hpp b/3party/boost/boost/container/detail/flat_tree.hpp index 23be0bfd13..9146fd4028 100644 --- a/3party/boost/boost/container/detail/flat_tree.hpp +++ b/3party/boost/boost/container/detail/flat_tree.hpp @@ -48,7 +48,7 @@ class flat_tree_value_compare typedef Value first_argument_type; typedef Value second_argument_type; typedef bool return_type; - public: + public: flat_tree_value_compare() : Compare() {} @@ -65,7 +65,7 @@ class flat_tree_value_compare const Compare &get_comp() const { return *this; } - + Compare &get_comp() { return *this; } }; @@ -214,6 +214,21 @@ class flat_tree : m_data(comp, a) { this->m_data.m_vect.insert(this->m_data.m_vect.end(), first, last); } + template + flat_tree( bool unique_insertion + , InputIterator first, InputIterator last + , const Compare& comp = Compare() + , const allocator_type& a = allocator_type()) + : m_data(comp, a) + { + if(unique_insertion){ + this->insert_unique(first, last); + } + else{ + this->insert_equal(first, last); + } + } + ~flat_tree() { } @@ -223,7 +238,7 @@ class flat_tree flat_tree& operator=(BOOST_RV_REF(flat_tree) mx) { m_data = boost::move(mx.m_data); return *this; } - public: + public: // accessors: Compare key_comp() const { return this->m_data.get_comp(); } @@ -290,9 +305,9 @@ class flat_tree std::pair insert_unique(const value_type& val) { insert_commit_data data; - std::pair ret = priv_insert_unique_prepare(val, data); + std::pair ret = this->priv_insert_unique_prepare(val, data); if(ret.second){ - ret.first = priv_insert_commit(data, val); + ret.first = this->priv_insert_commit(data, val); } return ret; } @@ -300,9 +315,9 @@ class flat_tree std::pair insert_unique(BOOST_RV_REF(value_type) val) { insert_commit_data data; - std::pair ret = priv_insert_unique_prepare(val, data); + std::pair ret = this->priv_insert_unique_prepare(val, data); if(ret.second){ - ret.first = priv_insert_commit(data, boost::move(val)); + ret.first = this->priv_insert_commit(data, boost::move(val)); } return ret; } @@ -324,9 +339,9 @@ class flat_tree iterator insert_unique(const_iterator pos, const value_type& val) { insert_commit_data data; - std::pair ret = priv_insert_unique_prepare(pos, val, data); + std::pair ret = this->priv_insert_unique_prepare(pos, val, data); if(ret.second){ - ret.first = priv_insert_commit(data, val); + ret.first = this->priv_insert_commit(data, val); } return ret.first; } @@ -334,9 +349,9 @@ class flat_tree iterator insert_unique(const_iterator pos, BOOST_RV_REF(value_type) mval) { insert_commit_data data; - std::pair ret = priv_insert_unique_prepare(pos, mval, data); + std::pair ret = this->priv_insert_unique_prepare(pos, mval, data); if(ret.second){ - ret.first = priv_insert_commit(data, boost::move(mval)); + ret.first = this->priv_insert_commit(data, boost::move(mval)); } return ret.first; } @@ -345,45 +360,168 @@ class flat_tree { insert_commit_data data; this->priv_insert_equal_prepare(pos, val, data); - return priv_insert_commit(data, val); + return this->priv_insert_commit(data, val); } iterator insert_equal(const_iterator pos, BOOST_RV_REF(value_type) mval) { insert_commit_data data; this->priv_insert_equal_prepare(pos, mval, data); - return priv_insert_commit(data, boost::move(mval)); + return this->priv_insert_commit(data, boost::move(mval)); } template void insert_unique(InIt first, InIt last) + { this->priv_insert_unique_loop(first, last); } + + template + void insert_equal(InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) + { this->priv_insert_equal_loop(first, last); } + + template + void insert_equal(InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) { - for ( ; first != last; ++first) - this->insert_unique(*first); + const size_type len = static_cast(std::distance(first, last)); + this->reserve(this->size()+len); + this->priv_insert_equal_loop(first, last); + } + + //Ordered + + template + void insert_equal(ordered_range_t, InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) + { this->priv_insert_equal_loop_ordered(first, last); } + + template + void insert_equal(ordered_range_t, FwdIt first, FwdIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_input_iterator::value && + container_detail::is_forward_iterator::value + >::type * = 0 + #endif + ) + { + const size_type len = static_cast(std::distance(first, last)); + this->reserve(this->size()+len); + this->priv_insert_equal_loop_ordered(first, last); + } + + template + void insert_equal(ordered_range_t, BidirIt first, BidirIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_input_iterator::value && + !container_detail::is_forward_iterator::value + >::type * = 0 + #endif + ) + { + size_type len = static_cast(std::distance(first, last)); + const size_type BurstSize = 16; + size_type positions[BurstSize]; + + //Prereserve all memory so that iterators are not invalidated + this->reserve(this->size()+len); + const const_iterator beg(this->cbegin()); + const_iterator pos(beg); + //Loop in burst sizes + while(len){ + const size_type burst = len < BurstSize ? len : BurstSize; + const const_iterator cend_(this->cend()); + len -= burst; + for(size_type i = 0; i != burst; ++i){ + //Get the insertion position for each key + pos = const_cast(*this).priv_upper_bound(pos, cend_, KeyOfValue()(*first)); + positions[i] = static_cast(pos - beg); + ++first; + } + //Insert all in a single step in the precalculated positions + this->m_data.m_vect.insert_ordered_at(burst, positions + burst, first); + //Next search position updated + pos += burst; + } } template - void insert_equal(InIt first, InIt last) - { - typedef typename - std::iterator_traits::iterator_category ItCat; - this->priv_insert_equal(first, last, ItCat()); - } + void insert_unique(ordered_unique_range_t, InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < container_detail::is_input_iterator::value || + container_detail::is_forward_iterator::value + >::type * = 0 + #endif + ) + { this->priv_insert_unique_loop_hint(first, last); } - template - void insert_equal(ordered_range_t, InIt first, InIt last) + template + void insert_unique(ordered_unique_range_t, BidirIt first, BidirIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !(container_detail::is_input_iterator::value || + container_detail::is_forward_iterator::value) + >::type * = 0 + #endif + ) { - typedef typename - std::iterator_traits::iterator_category ItCat; - this->priv_insert_equal(ordered_range_t(), first, last, ItCat()); - } + size_type len = static_cast(std::distance(first, last)); + const size_type BurstSize = 16; + size_type positions[BurstSize]; + size_type skips[BurstSize]; - template - void insert_unique(ordered_unique_range_t, InIt first, InIt last) - { - typedef typename - std::iterator_traits::iterator_category ItCat; - this->priv_insert_unique(ordered_unique_range_t(), first, last, ItCat()); + //Prereserve all memory so that iterators are not invalidated + this->reserve(this->size()+len); + const const_iterator beg(this->cbegin()); + const_iterator pos(beg); + const value_compare &value_comp = this->m_data; + skips[0u] = 0u; + //Loop in burst sizes + while(len){ + const size_type burst = len < BurstSize ? len : BurstSize; + size_type unique_burst = 0u; + const const_iterator cend_(this->cend()); + while(unique_burst < burst && len > 0){ + //Get the insertion position for each key + const value_type & val = *first++; + --len; + pos = const_cast(*this).priv_lower_bound(pos, cend_, KeyOfValue()(val)); + //Check if already present + if(pos != cend_ && !value_comp(val, *pos)){ + if(unique_burst > 0){ + ++skips[unique_burst-1]; + } + continue; + } + + //If not present, calculate position + positions[unique_burst] = static_cast(pos - beg); + skips[unique_burst++] = 0u; + } + if(unique_burst){ + //Insert all in a single step in the precalculated positions + this->m_data.m_vect.insert_ordered_at(unique_burst, positions + unique_burst, skips + unique_burst, first); + //Next search position updated + pos += unique_burst; + } + } } #ifdef BOOST_CONTAINER_PERFECT_FORWARDING @@ -398,9 +536,9 @@ class flat_tree value_destructor d(a, val); insert_commit_data data; std::pair ret = - priv_insert_unique_prepare(val, data); + this->priv_insert_unique_prepare(val, data); if(ret.second){ - ret.first = priv_insert_commit(data, boost::move(val)); + ret.first = this->priv_insert_commit(data, boost::move(val)); } return ret; } @@ -414,9 +552,9 @@ class flat_tree stored_allocator_traits::construct(a, &val, ::boost::forward(args)... ); value_destructor d(a, val); insert_commit_data data; - std::pair ret = priv_insert_unique_prepare(hint, val, data); + std::pair ret = this->priv_insert_unique_prepare(hint, val, data); if(ret.second){ - ret.first = priv_insert_commit(data, boost::move(val)); + ret.first = this->priv_insert_commit(data, boost::move(val)); } return ret.first; } @@ -444,7 +582,7 @@ class flat_tree value_destructor d(a, val); insert_commit_data data; this->priv_insert_equal_prepare(hint, val, data); - iterator i = priv_insert_commit(data, boost::move(val)); + iterator i = this->priv_insert_commit(data, boost::move(val)); return i; } @@ -462,9 +600,9 @@ class flat_tree BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ value_destructor d(a, val); \ insert_commit_data data; \ - std::pair ret = priv_insert_unique_prepare(val, data); \ + std::pair ret = this->priv_insert_unique_prepare(val, data); \ if(ret.second){ \ - ret.first = priv_insert_commit(data, boost::move(val)); \ + ret.first = this->priv_insert_commit(data, boost::move(val)); \ } \ return ret; \ } \ @@ -480,9 +618,9 @@ class flat_tree BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ value_destructor d(a, val); \ insert_commit_data data; \ - std::pair ret = priv_insert_unique_prepare(hint, val, data); \ + std::pair ret = this->priv_insert_unique_prepare(hint, val, data); \ if(ret.second){ \ - ret.first = priv_insert_commit(data, boost::move(val)); \ + ret.first = this->priv_insert_commit(data, boost::move(val)); \ } \ return ret.first; \ } \ @@ -513,7 +651,7 @@ class flat_tree value_destructor d(a, val); \ insert_commit_data data; \ this->priv_insert_equal_prepare(hint, val, data); \ - iterator i = priv_insert_commit(data, boost::move(val)); \ + iterator i = this->priv_insert_commit(data, boost::move(val)); \ return i; \ } \ @@ -554,22 +692,22 @@ class flat_tree // set operations: iterator find(const key_type& k) { - const Compare &key_comp = this->m_data.get_comp(); + const Compare &key_comp_ = this->m_data.get_comp(); iterator i = this->lower_bound(k); - if (i != this->end() && key_comp(k, KeyOfValue()(*i))){ - i = this->end(); + if (i != this->end() && key_comp_(k, KeyOfValue()(*i))){ + i = this->end(); } return i; } const_iterator find(const key_type& k) const { - const Compare &key_comp = this->m_data.get_comp(); + const Compare &key_comp_ = this->m_data.get_comp(); const_iterator i = this->lower_bound(k); - if (i != this->end() && key_comp(k, KeyOfValue()(*i))){ - i = this->end(); + if (i != this->end() && key_comp_(k, KeyOfValue()(*i))){ + i = this->end(); } return i; } @@ -599,11 +737,11 @@ class flat_tree std::pair equal_range(const key_type& k) const { return this->priv_equal_range(this->begin(), this->end(), k); } - size_type capacity() const + size_type capacity() const { return this->m_data.m_vect.capacity(); } - void reserve(size_type count) - { this->m_data.m_vect.reserve(count); } + void reserve(size_type count_) + { this->m_data.m_vect.reserve(count_); } private: struct insert_commit_data @@ -642,18 +780,18 @@ class flat_tree } std::pair priv_insert_unique_prepare - (const_iterator beg, const_iterator end, const value_type& val, insert_commit_data &commit_data) + (const_iterator beg, const_iterator end_, const value_type& val, insert_commit_data &commit_data) { const value_compare &value_comp = this->m_data; - commit_data.position = this->priv_lower_bound(beg, end, KeyOfValue()(val)); + commit_data.position = this->priv_lower_bound(beg, end_, KeyOfValue()(val)); return std::pair ( *reinterpret_cast(&commit_data.position) - , commit_data.position == end || value_comp(val, *commit_data.position)); + , commit_data.position == end_ || value_comp(val, *commit_data.position)); } std::pair priv_insert_unique_prepare (const value_type& val, insert_commit_data &commit_data) - { return priv_insert_unique_prepare(this->begin(), this->end(), val, commit_data); } + { return this->priv_insert_unique_prepare(this->begin(), this->end(), val, commit_data); } std::pair priv_insert_unique_prepare (const_iterator pos, const value_type& val, insert_commit_data &commit_data) @@ -716,7 +854,7 @@ class flat_tree RanIt priv_lower_bound(RanIt first, RanIt last, const key_type & key) const { - const Compare &key_comp = this->m_data.get_comp(); + const Compare &key_comp_ = this->m_data.get_comp(); KeyOfValue key_extract; difference_type len = last - first, half; RanIt middle; @@ -726,7 +864,7 @@ class flat_tree middle = first; middle += half; - if (key_comp(key_extract(*middle), key)) { + if (key_comp_(key_extract(*middle), key)) { ++middle; first = middle; len = len - half - 1; @@ -741,7 +879,7 @@ class flat_tree RanIt priv_upper_bound(RanIt first, RanIt last, const key_type & key) const { - const Compare &key_comp = this->m_data.get_comp(); + const Compare &key_comp_ = this->m_data.get_comp(); KeyOfValue key_extract; difference_type len = last - first, half; RanIt middle; @@ -751,12 +889,12 @@ class flat_tree middle = first; middle += half; - if (key_comp(key, key_extract(*middle))) { + if (key_comp_(key, key_extract(*middle))) { len = half; } else{ first = ++middle; - len = len - half - 1; + len = len - half - 1; } } return first; @@ -766,7 +904,7 @@ class flat_tree std::pair priv_equal_range(RanIt first, RanIt last, const key_type& key) const { - const Compare &key_comp = this->m_data.get_comp(); + const Compare &key_comp_ = this->m_data.get_comp(); KeyOfValue key_extract; difference_type len = last - first, half; RanIt middle, left, right; @@ -776,12 +914,12 @@ class flat_tree middle = first; middle += half; - if (key_comp(key_extract(*middle), key)){ + if (key_comp_(key_extract(*middle), key)){ first = middle; ++first; len = len - half - 1; } - else if (key_comp(key, key_extract(*middle))){ + else if (key_comp_(key, key_extract(*middle))){ len = half; } else { @@ -794,102 +932,38 @@ class flat_tree return std::pair(first, first); } - template - void priv_insert_equal(ordered_range_t, BidirIt first, BidirIt last, std::bidirectional_iterator_tag) + template + void priv_insert_equal_loop(InIt first, InIt last) { - size_type len = static_cast(std::distance(first, last)); - const size_type BurstSize = 16; - size_type positions[BurstSize]; - - //Prereserve all memory so that iterators are not invalidated - this->reserve(this->size()+len); - const const_iterator beg(this->cbegin()); - const_iterator pos(beg); - //Loop in burst sizes - while(len){ - const size_type burst = len < BurstSize ? len : BurstSize; - const const_iterator cend(this->cend()); - len -= burst; - for(size_type i = 0; i != burst; ++i){ - //Get the insertion position for each key - pos = const_cast(*this).priv_upper_bound(pos, cend, KeyOfValue()(*first)); - positions[i] = static_cast(pos - beg); - ++first; - } - //Insert all in a single step in the precalculated positions - this->m_data.m_vect.insert_ordered_at(burst, positions + burst, first); - //Next search position updated - pos += burst; - } - } - - template - void priv_insert_unique(ordered_unique_range_t, BidirIt first, BidirIt last, std::bidirectional_iterator_tag) - { - size_type len = static_cast(std::distance(first, last)); - const size_type BurstSize = 16; - size_type positions[BurstSize]; - size_type skips[BurstSize]; - - //Prereserve all memory so that iterators are not invalidated - this->reserve(this->size()+len); - const const_iterator beg(this->cbegin()); - const_iterator pos(beg); - const value_compare &value_comp = this->m_data; - //Loop in burst sizes - while(len){ - skips[0u] = 0u; - const size_type burst = len < BurstSize ? len : BurstSize; - size_type unique_burst = 0u; - const const_iterator cend(this->cend()); - while(unique_burst < burst && len > 0){ - //Get the insertion position for each key - const value_type & val = *first++; - --len; - pos = const_cast(*this).priv_lower_bound(pos, cend, KeyOfValue()(val)); - //Check if already present - if(pos != cend && !value_comp(*pos, val)){ - ++skips[unique_burst]; - continue; - } - - //If not present, calculate position - positions[unique_burst] = static_cast(pos - beg); - if(++unique_burst < burst) - skips[unique_burst] = 0u; - } - //Insert all in a single step in the precalculated positions - this->m_data.m_vect.insert_ordered_at(unique_burst, positions + unique_burst, skips + unique_burst, first); - //Next search position updated - pos += unique_burst; - } - } -/* - template - void priv_insert_equal_forward(ordered_range_t, FwdIt first, FwdIt last, std::forward_iterator_tag) - { this->priv_insert_equal(first, last, std::forward_iterator_tag()); } -*/ - template - void priv_insert_equal(ordered_range_t, InIt first, InIt last, std::input_iterator_tag) - { this->priv_insert_equal(first, last, std::input_iterator_tag()); } - - template - void priv_insert_unique(ordered_unique_range_t, InIt first, InIt last, std::input_iterator_tag) - { this->priv_insert_unique(first, last, std::input_iterator_tag()); } -/* - template - void priv_insert_equal_forward(FwdIt first, FwdIt last, std::forward_iterator_tag) - { - const size_type len = static_cast(std::distance(first, last)); - this->reserve(this->size()+len); - this->priv_insert_equal(first, last, std::input_iterator_tag()); - } -*/ - template - void priv_insert_equal(InIt first, InIt last, std::input_iterator_tag) - { - for ( ; first != last; ++first) + for ( ; first != last; ++first){ this->insert_equal(*first); + } + } + + template + void priv_insert_equal_loop_ordered(InIt first, InIt last) + { + const_iterator pos(this->cend()); + for ( ; first != last; ++first){ + pos = this->insert_equal(pos, *first); + } + } + + template + void priv_insert_unique_loop(InIt first, InIt last) + { + for ( ; first != last; ++first){ + this->insert_unique(*first); + } + } + + template + void priv_insert_unique_loop_ordered(InIt first, InIt last) + { + const_iterator pos(this->cend()); + for ( ; first != last; ++first){ + pos = this->insert_unique(pos, *first); + } } }; diff --git a/3party/boost/boost/container/detail/iterators.hpp b/3party/boost/boost/container/detail/iterators.hpp index 374b55c836..3e77931512 100644 --- a/3party/boost/boost/container/detail/iterators.hpp +++ b/3party/boost/boost/container/detail/iterators.hpp @@ -22,10 +22,10 @@ #include #include #include +#include #ifdef BOOST_CONTAINER_PERFECT_FORWARDING #include -#include #else #include #endif @@ -222,14 +222,12 @@ class default_construct_iterator default_construct_iterator operator-(Difference off) const { return *this + (-off); } - const T& operator*() const - { return dereference(); } - - const T* operator->() const - { return &(dereference()); } - - const T& operator[] (Difference n) const - { return dereference(); } + //This pseudo-iterator's dereference operations have no sense since value is not + //constructed until ::boost::container::construct_in_place is called. + //So comment them to catch bad uses + //const T& operator*() const; + //const T& operator[](difference_type) const; + //const T* operator->() const; private: Difference m_num; @@ -445,14 +443,12 @@ class emplace_iterator this_type operator-(difference_type off) const { return *this + (-off); } - const T& operator*() const - { return dereference(); } - - const T& operator[](difference_type) const - { return dereference(); } - - const T* operator->() const - { return &(dereference()); } + //This pseudo-iterator's dereference operations have no sense since value is not + //constructed until ::boost::container::construct_in_place is called. + //So comment them to catch bad uses + //const T& operator*() const; + //const T& operator[](difference_type) const; + //const T* operator->() const; template void construct_in_place(A &a, T* ptr) @@ -506,8 +502,7 @@ struct emplace_functor void inplace_impl(A &a, T* ptr, const container_detail::index_tuple&) { allocator_traits::construct - (a, ptr, container_detail::stored_ref::forward - (container_detail::get(args_))...); + (a, ptr, ::boost::forward(container_detail::get(args_))...); } container_detail::tuple args_; @@ -539,10 +534,78 @@ struct emplace_functor #endif +namespace container_detail { + +template +struct has_iterator_category +{ + template + static char test(int, typename X::iterator_category*); + + template + static int test(int, ...); + + static const bool value = (1 == sizeof(test(0, 0))); +}; + + +template::value > +struct is_input_iterator +{ + static const bool value = is_same::value; +}; + +template +struct is_input_iterator +{ + static const bool value = false; +}; + +template::value > +struct is_forward_iterator +{ + static const bool value = is_same::value; +}; + +template +struct is_forward_iterator +{ + static const bool value = false; +}; + +template::value > +struct is_bidirectional_iterator +{ + static const bool value = is_same::value; +}; + +template +struct is_bidirectional_iterator +{ + static const bool value = false; +}; + +template +struct iiterator_types +{ + typedef typename std::iterator_traits::pointer it_pointer; + typedef typename std::iterator_traits::difference_type difference_type; + typedef typename ::boost::intrusive::pointer_traits:: + template rebind_pointer::type pointer; + typedef typename ::boost::intrusive::pointer_traits:: + template rebind_pointer::type const_pointer; + typedef typename ::boost::intrusive:: + pointer_traits::reference reference; + typedef typename ::boost::intrusive:: + pointer_traits::reference const_reference; +}; + + +} //namespace container_detail { + } //namespace container { } //namespace boost { #include #endif //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP - diff --git a/3party/boost/boost/container/detail/multiallocation_chain.hpp b/3party/boost/boost/container/detail/multiallocation_chain.hpp index c9952535eb..57520832f0 100644 --- a/3party/boost/boost/container/detail/multiallocation_chain.hpp +++ b/3party/boost/boost/container/detail/multiallocation_chain.hpp @@ -45,14 +45,30 @@ class basic_multiallocation_chain > slist_impl_t; slist_impl_t slist_impl_; - static node & to_node(VoidPointer p) - { return *static_cast(static_cast(container_detail::to_raw_pointer(p))); } + typedef typename boost::intrusive::pointer_traits + ::template rebind_pointer::type node_ptr; + typedef typename boost::intrusive:: + pointer_traits node_ptr_traits; + + static node & build_node(const VoidPointer &p) + { + return *::new (static_cast(static_cast(container_detail::to_raw_pointer(p)))) node; + } + + static VoidPointer destroy_node(node &n) + { + VoidPointer retptr = node_ptr_traits::pointer_to(n); + n.~node(); + return retptr; + } + + static node_ptr to_node_ptr(VoidPointer p) + { return node_ptr_traits::static_cast_from(p); } BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_multiallocation_chain) public: - typedef VoidPointer void_pointer; typedef typename slist_impl_t::iterator iterator; typedef typename slist_impl_t::size_type size_type; @@ -94,34 +110,38 @@ class basic_multiallocation_chain { slist_impl_.clear(); } iterator insert_after(iterator it, void_pointer m) - { return slist_impl_.insert_after(it, to_node(m)); } + { return slist_impl_.insert_after(it, build_node(m)); } void push_front(void_pointer m) - { return slist_impl_.push_front(to_node(m)); } + { return slist_impl_.push_front(build_node(m)); } void push_back(void_pointer m) - { return slist_impl_.push_back(to_node(m)); } + { return slist_impl_.push_back(build_node(m)); } - void pop_front() - { return slist_impl_.pop_front(); } + void_pointer pop_front() + { + node & n = slist_impl_.front(); + void_pointer ret = destroy_node(n); + slist_impl_.pop_front(); + return ret; + } - void *front() - { return &*slist_impl_.begin(); } + void splice_after(iterator after_this, basic_multiallocation_chain &x, iterator before_begin_, iterator before_end) + { slist_impl_.splice_after(after_this, x.slist_impl_, before_begin_, before_end); } - void splice_after(iterator after_this, basic_multiallocation_chain &x, iterator before_begin, iterator before_end) - { slist_impl_.splice_after(after_this, x.slist_impl_, before_begin, before_end); } - - void splice_after(iterator after_this, basic_multiallocation_chain &x, iterator before_begin, iterator before_end, size_type n) - { slist_impl_.splice_after(after_this, x.slist_impl_, before_begin, before_end, n); } + void splice_after(iterator after_this, basic_multiallocation_chain &x, iterator before_begin_, iterator before_end, size_type n) + { slist_impl_.splice_after(after_this, x.slist_impl_, before_begin_, before_end, n); } void splice_after(iterator after_this, basic_multiallocation_chain &x) { slist_impl_.splice_after(after_this, x.slist_impl_); } - void incorporate_after(iterator after_this, void_pointer begin , iterator before_end) - { slist_impl_.incorporate_after(after_this, &to_node(begin), &to_node(before_end)); } + void incorporate_after(iterator after_this, void_pointer begin_ , iterator before_end) + { + slist_impl_.incorporate_after(after_this, to_node_ptr(begin_), to_node_ptr(before_end)); + } - void incorporate_after(iterator after_this, void_pointer begin, void_pointer before_end, size_type n) - { slist_impl_.incorporate_after(after_this, &to_node(begin), &to_node(before_end), n); } + void incorporate_after(iterator after_this, void_pointer begin_, void_pointer before_end, size_type n) + { slist_impl_.incorporate_after(after_this, to_node_ptr(begin_), to_node_ptr(before_end), n); } void swap(basic_multiallocation_chain &x) { slist_impl_.swap(x.slist_impl_); } @@ -157,18 +177,20 @@ class transform_multiallocation_chain MultiallocationChain holder_; typedef typename MultiallocationChain::void_pointer void_pointer; typedef typename boost::intrusive::pointer_traits - ::template rebind_pointer::type pointer; + void_pointer_traits; + typedef typename void_pointer_traits::template + rebind_pointer::type pointer; + typedef typename boost::intrusive::pointer_traits + pointer_traits; - static pointer cast(void_pointer p) - { - return pointer(static_cast(container_detail::to_raw_pointer(p))); - } + static pointer cast(const void_pointer &p) + { return pointer_traits::static_cast_from(p); } public: typedef transform_iterator < typename MultiallocationChain::iterator - , container_detail::cast_functor > iterator; - typedef typename MultiallocationChain::size_type size_type; + , container_detail::cast_functor > iterator; + typedef typename MultiallocationChain::size_type size_type; transform_multiallocation_chain() : holder_() @@ -195,17 +217,14 @@ class transform_multiallocation_chain void swap(transform_multiallocation_chain &other_chain) { holder_.swap(other_chain.holder_); } - void splice_after(iterator after_this, transform_multiallocation_chain &x, iterator before_begin, iterator before_end, size_type n) - { holder_.splice_after(after_this.base(), x.holder_, before_begin.base(), before_end.base(), n); } + void splice_after(iterator after_this, transform_multiallocation_chain &x, iterator before_begin_, iterator before_end, size_type n) + { holder_.splice_after(after_this.base(), x.holder_, before_begin_.base(), before_end.base(), n); } - void incorporate_after(iterator after_this, void_pointer begin, void_pointer before_end, size_type n) - { holder_.incorporate_after(after_this.base(), begin, before_end, n); } + void incorporate_after(iterator after_this, pointer begin_, pointer before_end, size_type n) + { holder_.incorporate_after(after_this.base(), begin_, before_end, n); } - void pop_front() - { holder_.pop_front(); } - - pointer front() - { return cast(holder_.front()); } + pointer pop_front() + { return cast(holder_.pop_front()); } bool empty() const { return holder_.empty(); } @@ -234,8 +253,11 @@ class transform_multiallocation_chain static iterator iterator_to(pointer p) { return iterator(MultiallocationChain::iterator_to(p)); } - std::pair extract_data() - { return holder_.extract_data(); } + std::pair extract_data() + { + std::pair data(holder_.extract_data()); + return std::pair(cast(data.first), cast(data.second)); + } MultiallocationChain extract_multiallocation_chain() { diff --git a/3party/boost/boost/container/detail/node_alloc_holder.hpp b/3party/boost/boost/container/detail/node_alloc_holder.hpp index 9797f1fbd5..68048bc6ad 100644 --- a/3party/boost/boost/container/detail/node_alloc_holder.hpp +++ b/3party/boost/boost/container/detail/node_alloc_holder.hpp @@ -43,99 +43,6 @@ namespace boost { namespace container { namespace container_detail { -//!A deleter for scoped_ptr that deallocates the memory -//!allocated for an object using a STL allocator. -template -struct scoped_deallocator -{ - typedef allocator_traits allocator_traits_type; - typedef typename allocator_traits_type::pointer pointer; - typedef container_detail::integral_constant::value> alloc_version; - typedef container_detail::integral_constant allocator_v1; - typedef container_detail::integral_constant allocator_v2; - - private: - void priv_deallocate(allocator_v1) - { m_alloc.deallocate(m_ptr, 1); } - - void priv_deallocate(allocator_v2) - { m_alloc.deallocate_one(m_ptr); } - - BOOST_MOVABLE_BUT_NOT_COPYABLE(scoped_deallocator) - - public: - - pointer m_ptr; - A& m_alloc; - - scoped_deallocator(pointer p, A& a) - : m_ptr(p), m_alloc(a) - {} - - ~scoped_deallocator() - { if (m_ptr)priv_deallocate(alloc_version()); } - - scoped_deallocator(BOOST_RV_REF(scoped_deallocator) o) - : m_ptr(o.m_ptr), m_alloc(o.m_alloc) - { o.release(); } - - pointer get() const - { return m_ptr; } - - void release() - { m_ptr = 0; } -}; - -template -class allocator_destroyer_and_chain_builder -{ - typedef allocator_traits allocator_traits_type; - typedef typename allocator_traits_type::value_type value_type; - typedef typename A::multiallocation_chain multiallocation_chain; - - A & a_; - multiallocation_chain &c_; - - public: - allocator_destroyer_and_chain_builder(A &a, multiallocation_chain &c) - : a_(a), c_(c) - {} - - void operator()(const typename A::pointer &p) - { - allocator_traits::destroy(a_, container_detail::to_raw_pointer(p)); - c_.push_front(p); - } -}; - -template -class allocator_multialloc_chain_node_deallocator -{ - typedef allocator_traits allocator_traits_type; - typedef typename allocator_traits_type::value_type value_type; - typedef typename A::multiallocation_chain multiallocation_chain; - typedef allocator_destroyer_and_chain_builder chain_builder; - - A & a_; - multiallocation_chain c_; - - public: - allocator_multialloc_chain_node_deallocator(A &a) - : a_(a), c_() - {} - - chain_builder get_chain_builder() - { return chain_builder(a_, c_); } - - ~allocator_multialloc_chain_node_deallocator() - { - if(!c_.empty()) - a_.deallocate_individual(boost::move(c_)); - } -}; - template struct node_compare : private ValueCompare @@ -340,8 +247,7 @@ struct node_alloc_holder Node *p = 0; BOOST_TRY{ for(difference_type i = 0; i < n; ++i, ++beg, --constructed){ - p = container_detail::to_raw_pointer(mem.front()); - mem.pop_front(); + p = container_detail::to_raw_pointer(mem.pop_front()); //This can throw constructed = 0; boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->m_data), beg); diff --git a/3party/boost/boost/container/detail/preprocessor.hpp b/3party/boost/boost/container/detail/preprocessor.hpp index 1818094be1..5129ea1eb5 100644 --- a/3party/boost/boost/container/detail/preprocessor.hpp +++ b/3party/boost/boost/container/detail/preprocessor.hpp @@ -16,11 +16,6 @@ #endif #include - -#ifndef BOOST_NO_RVALUE_REFERENCES -#include -#endif //#ifndef BOOST_NO_RVALUE_REFERENCES - #include #ifdef BOOST_CONTAINER_PERFECT_FORWARDING @@ -78,19 +73,10 @@ const BOOST_PP_CAT(Q, n) & BOOST_PP_CAT(q, n) \ #ifndef BOOST_NO_RVALUE_REFERENCES - #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - - #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (static_cast( BOOST_PP_CAT(p, n) )) \ - - #else //#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ BOOST_PP_CAT(m_p, n) (::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) )) \ //! - #endif //BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES - #else //BOOST_NO_RVALUE_REFERENCES #define BOOST_CONTAINER_PP_PARAM_INIT(z, n, data) \ @@ -102,8 +88,68 @@ const BOOST_PP_CAT(Q, n) & BOOST_PP_CAT(q, n) \ #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + namespace boost { + namespace container { + namespace container_detail { + template + struct ref_holder; + + template + struct ref_holder + { + ref_holder(T &t) + : t_(t) + {} + T &t_; + T & get() { return t_; } + }; + + template + struct ref_holder + { + ref_holder(const T &t) + : t_(t) + {} + const T &t_; + const T & get() { return t_; } + }; + + template + struct ref_holder + { + ref_holder(const T &t) + : t_(t) + {} + const T &t_; + const T & get() { return t_; } + }; + + template + struct ref_holder + { + ref_holder(T &&t) + : t_(t) + {} + T &t_; + T && get() { return ::boost::move(t_); } + }; + + template + struct ref_holder + { + ref_holder(T &&t) + : t(t) + {} + T &t; + T && get() { return ::boost::move(t_); } + }; + + } //namespace container_detail { + } //namespace container { + } //namespace boost { + #define BOOST_CONTAINER_PP_PARAM_DEFINE(z, n, data) \ - BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ + ::boost::container::container_detail::ref_holder BOOST_PP_CAT(m_p, n); \ //! #else //BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG @@ -123,8 +169,7 @@ const BOOST_PP_CAT(Q, n) & BOOST_PP_CAT(q, n) \ #if !defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - #define BOOST_CONTAINER_PP_MEMBER_FORWARD(z, n, data) \ - ::boost::container::container_detail::stored_ref< BOOST_PP_CAT(P, n) >::forward( BOOST_PP_CAT(this->m_p, n) ) \ + #define BOOST_CONTAINER_PP_MEMBER_FORWARD(z, n, data) BOOST_PP_CAT(this->m_p, n).get() \ //! #else //!defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) diff --git a/3party/boost/boost/container/detail/stored_ref.hpp b/3party/boost/boost/container/detail/stored_ref.hpp deleted file mode 100644 index 80fda89615..0000000000 --- a/3party/boost/boost/container/detail/stored_ref.hpp +++ /dev/null @@ -1,92 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 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) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINER_DETAIL_STORED_REF_HPP -#define BOOST_CONTAINER_DETAIL_STORED_REF_HPP - -#include "config_begin.hpp" -#include - -#ifndef BOOST_NO_RVALUE_REFERENCES - -namespace boost{ -namespace container{ -namespace container_detail{ - -template -struct stored_ref -{ - - static T && forward(T &t) - #ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES - { return t; } - #else - { return boost::move(t); } - #endif -}; - -template -struct stored_ref -{ - static const T && forward(const T &t) - #ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES - { return t; } - #else - { return static_cast(t); } - #endif -}; - -template -struct stored_ref -{ - static T && forward(T &t) - #ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES - { return t; } - #else - { return boost::move(t); } - #endif -}; - -template -struct stored_ref -{ - static const T && forward(const T &t) - #ifdef BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES - { return t; } - #else - { return static_cast(t); } - #endif -}; - -template -struct stored_ref -{ - static const T & forward(const T &t) - { return t; } -}; - -template -struct stored_ref -{ - static T & forward(T &t) - { return t; } -}; - -} //namespace container_detail{ -} //namespace container{ -} //namespace boost{ - -#else -#error "This header can be included only for compiler with rvalue references" -#endif //BOOST_NO_RVALUE_REFERENCES - -#include - -#endif //BOOST_CONTAINER_DETAIL_STORED_REF_HPP diff --git a/3party/boost/boost/container/detail/tree.hpp b/3party/boost/boost/container/detail/tree.hpp index 3ab1536204..12342a80df 100644 --- a/3party/boost/boost/container/detail/tree.hpp +++ b/3party/boost/boost/container/detail/tree.hpp @@ -41,7 +41,7 @@ namespace container { namespace container_detail { template -struct value_compare_impl +struct tree_value_compare : public KeyCompare { typedef Value value_type; @@ -49,7 +49,7 @@ struct value_compare_impl typedef KeyOfValue key_of_value; typedef Key key_type; - value_compare_impl(const key_compare &kcomp) + tree_value_compare(const key_compare &kcomp) : key_compare(kcomp) {} @@ -209,13 +209,13 @@ class rbtree : protected container_detail::node_alloc_holder < A , typename container_detail::intrusive_rbtree_type - + >::type , KeyCompare > { typedef typename container_detail::intrusive_rbtree_type - < A, value_compare_impl + < A, tree_value_compare >::type Icont; typedef container_detail::node_alloc_holder @@ -315,7 +315,7 @@ class rbtree typedef Value value_type; typedef A allocator_type; typedef KeyCompare key_compare; - typedef value_compare_impl< Key, Value + typedef tree_value_compare< Key, Value , KeyCompare, KeyOfValue> value_compare; typedef typename boost::container:: allocator_traits::pointer pointer; @@ -476,21 +476,77 @@ class rbtree {} template - rbtree(InputIterator first, InputIterator last, const key_compare& comp, - const allocator_type& a, bool unique_insertion) + rbtree(bool unique_insertion, InputIterator first, InputIterator last, const key_compare& comp, + const allocator_type& a + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < container_detail::is_input_iterator::value + || container_detail::is_same::value + >::type * = 0 + #endif + ) : AllocHolder(a, comp) { - typedef typename std::iterator_traits::iterator_category ItCat; - priv_create_and_insert_nodes(first, last, unique_insertion, alloc_version(), ItCat()); + if(unique_insertion){ + this->insert_unique(first, last); + } + else{ + this->insert_equal(first, last); + } + } + + template + rbtree(bool unique_insertion, InputIterator first, InputIterator last, const key_compare& comp, + const allocator_type& a + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !(container_detail::is_input_iterator::value + || container_detail::is_same::value) + >::type * = 0 + #endif + ) + : AllocHolder(a, comp) + { + if(unique_insertion){ + this->insert_unique(first, last); + } + else{ + //Optimized allocation and construction + this->allocate_many_and_construct + (first, std::distance(first, last), insert_equal_end_hint_functor(this->icont())); + } } template rbtree( ordered_range_t, InputIterator first, InputIterator last - , const key_compare& comp = key_compare(), const allocator_type& a = allocator_type()) + , const key_compare& comp = key_compare(), const allocator_type& a = allocator_type() + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < container_detail::is_input_iterator::value + || container_detail::is_same::value + >::type * = 0 + #endif + ) : AllocHolder(a, comp) { - typedef typename std::iterator_traits::iterator_category ItCat; - priv_create_and_insert_ordered_nodes(first, last, alloc_version(), ItCat()); + this->insert_equal(first, last); + } + + template + rbtree( ordered_range_t, InputIterator first, InputIterator last + , const key_compare& comp = key_compare(), const allocator_type& a = allocator_type() + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !(container_detail::is_input_iterator::value + || container_detail::is_same::value) + >::type * = 0 + #endif + ) + : AllocHolder(a, comp) + { + //Optimized allocation and construction + this->allocate_many_and_construct + (first, std::distance(first, last), push_back_functor(this->icont())); } rbtree(const rbtree& x) @@ -943,14 +999,14 @@ class rbtree { return const_iterator(this->non_const_icont().upper_bound(k, KeyNodeCompare(value_comp()))); } std::pair equal_range(const key_type& k) - { + { std::pair ret = this->icont().equal_range(k, KeyNodeCompare(value_comp())); return std::pair(iterator(ret.first), iterator(ret.second)); } std::pair equal_range(const key_type& k) const - { + { std::pair ret = this->non_const_icont().equal_range(k, KeyNodeCompare(value_comp())); return std::pair @@ -958,108 +1014,39 @@ class rbtree } private: - //Iterator range version - template - void priv_create_and_insert_nodes - (InpIterator beg, InpIterator end, bool unique, allocator_v1, std::input_iterator_tag) - { - if(unique){ - for (; beg != end; ++beg){ - this->insert_unique(*beg); - } - } - else{ - for (; beg != end; ++beg){ - this->insert_equal(*beg); - } - } - } - template - void priv_create_and_insert_nodes - (InpIterator beg, InpIterator end, bool unique, allocator_v2, std::input_iterator_tag) - { //Just forward to the default one - priv_create_and_insert_nodes(beg, end, unique, allocator_v1(), std::input_iterator_tag()); - } + class insert_equal_end_hint_functor; + friend class insert_equal_end_hint_functor; - class insertion_functor; - friend class insertion_functor; - - class insertion_functor + class insert_equal_end_hint_functor { Icont &icont_; + const iconst_iterator cend_; public: - insertion_functor(Icont &icont) - : icont_(icont) + insert_equal_end_hint_functor(Icont &icont) + : icont_(icont), cend_(this->icont_.cend()) {} void operator()(Node &n) - { this->icont_.insert_equal(this->icont_.cend(), n); } + { this->icont_.insert_equal(cend_, n); } }; + class push_back_functor; + friend class push_back_functor; - template - void priv_create_and_insert_nodes - (FwdIterator beg, FwdIterator end, bool unique, allocator_v2, std::forward_iterator_tag) - { - if(beg != end){ - if(unique){ - priv_create_and_insert_nodes(beg, end, unique, allocator_v2(), std::input_iterator_tag()); - } - else{ - //Optimized allocation and construction - this->allocate_many_and_construct - (beg, std::distance(beg, end), insertion_functor(this->icont())); - } - } - } - - //Iterator range version - template - void priv_create_and_insert_ordered_nodes - (InpIterator beg, InpIterator end, allocator_v1, std::input_iterator_tag) - { - const_iterator cend_n(this->cend()); - for (; beg != end; ++beg){ - this->insert_before(cend_n, *beg); - } - } - - template - void priv_create_and_insert_ordered_nodes - (InpIterator beg, InpIterator end, allocator_v2, std::input_iterator_tag) - { //Just forward to the default one - priv_create_and_insert_ordered_nodes(beg, end, allocator_v1(), std::input_iterator_tag()); - } - - class back_insertion_functor; - friend class back_insertion_functor; - - class back_insertion_functor + class push_back_functor { Icont &icont_; public: - back_insertion_functor(Icont &icont) + push_back_functor(Icont &icont) : icont_(icont) {} void operator()(Node &n) { this->icont_.push_back(n); } }; - - - template - void priv_create_and_insert_ordered_nodes - (FwdIterator beg, FwdIterator end, allocator_v2, std::forward_iterator_tag) - { - if(beg != end){ - //Optimized allocation and construction - this->allocate_many_and_construct - (beg, std::distance(beg, end), back_insertion_functor(this->icont())); - } - } }; template -struct __rw_is_enum -{ - struct _C_no { }; - struct _C_yes { int _C_dummy [2]; }; - - struct _C_indirect { - // prevent classes with user-defined conversions from matching - - // use double to prevent float->int gcc conversion warnings - _C_indirect (double); -}; - -// nested struct gets rid of bogus gcc errors -struct _C_nest { - // supply first argument to prevent HP aCC warnings - static _C_no _C_is (int, ...); - static _C_yes _C_is (int, _C_indirect); - - static _TypeT _C_make_T (); -}; - -enum { - _C_val = sizeof (_C_yes) == sizeof (_C_nest::_C_is (0, _C_nest::_C_make_T ())) - && !::boost::is_fundamental<_TypeT>::value -}; - -}; -*/ template struct move_const_ref_type diff --git a/3party/boost/boost/container/detail/workaround.hpp b/3party/boost/boost/container/detail/workaround.hpp index c4440743fc..7838a5db50 100644 --- a/3party/boost/boost/container/detail/workaround.hpp +++ b/3party/boost/boost/container/detail/workaround.hpp @@ -31,6 +31,10 @@ #define BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST #endif +//Macros for documentation purposes. For code, expands to the argument +#define BOOST_CONTAINER_IMPDEF(TYPE) TYPE +#define BOOST_CONTAINER_SEEDOC(TYPE) TYPE + #include #endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP diff --git a/3party/boost/boost/container/flat_map.hpp b/3party/boost/boost/container/flat_map.hpp index 0142500860..4fb9e07c45 100644 --- a/3party/boost/boost/container/flat_map.hpp +++ b/3party/boost/boost/container/flat_map.hpp @@ -28,31 +28,23 @@ #include #include #include +#include -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { namespace container { -#else -namespace boost { -namespace container { -#endif /// @cond // Forward declarations of operators == and <, needed for friend declarations. -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template >, class A = std::allocator > -#else -template -#endif +template class flat_map; -template -inline bool operator==(const flat_map& x, - const flat_map& y); +template +inline bool operator==(const flat_map& x, + const flat_map& y); -template -inline bool operator<(const flat_map& x, - const flat_map& y); +template +inline bool operator<(const flat_map& x, + const flat_map& y); namespace container_detail{ @@ -82,9 +74,9 @@ static D force_copy(S s) //! flat_map the key_type is Key and the value_type is std::pair //! (unlike std::map which value_type is std::pair<const Key, T>). //! -//! Pred is the ordering function for Keys (e.g. std::less). +//! Compare is the ordering function for Keys (e.g. std::less). //! -//! A is the allocator to allocate the value_types +//! Allocator is the allocator to allocate the value_types //! (e.g. allocator< std::pair >). //! //! flat_map is similar to std::map but it's implemented like an ordered vector. @@ -94,9 +86,9 @@ static D force_copy(S s) //! Erasing an element of a flat_map invalidates iterators and references //! pointing to elements that come after (their keys are bigger) the erased element. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template >, class A = std::allocator > +template , class Allocator = std::allocator< std::pair< Key, T> > > #else -template +template #endif class flat_map { @@ -107,72 +99,68 @@ class flat_map typedef container_detail::flat_tree, container_detail::select1st< std::pair >, - Pred, - A> tree_t; + Compare, + Allocator> tree_t; //This is the real tree stored here. It's based on a movable pair typedef container_detail::flat_tree, container_detail::select1st >, - Pred, - typename allocator_traits::template portable_rebind_alloc + Compare, + typename allocator_traits::template portable_rebind_alloc >::type> impl_tree_t; impl_tree_t m_flat_tree; // flat tree representing flat_map typedef typename impl_tree_t::value_type impl_value_type; - typedef typename impl_tree_t::pointer impl_pointer; - typedef typename impl_tree_t::const_pointer impl_const_pointer; - typedef typename impl_tree_t::reference impl_reference; - typedef typename impl_tree_t::const_reference impl_const_reference; - typedef typename impl_tree_t::value_compare impl_value_compare; - typedef typename impl_tree_t::iterator impl_iterator; typedef typename impl_tree_t::const_iterator impl_const_iterator; - typedef typename impl_tree_t::reverse_iterator impl_reverse_iterator; - typedef typename impl_tree_t::const_reverse_iterator impl_const_reverse_iterator; typedef typename impl_tree_t::allocator_type impl_allocator_type; - typedef allocator_traits allocator_traits_type; - - - + typedef container_detail::flat_tree_value_compare + < Compare + , container_detail::select1st< std::pair > + , std::pair > value_compare_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::iterator iterator_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::const_iterator const_iterator_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::reverse_iterator reverse_iterator_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::const_reverse_iterator const_reverse_iterator_impl; /// @endcond public: - // typedefs: - typedef Key key_type; - typedef T mapped_type; - typedef typename std::pair value_type; - typedef typename allocator_traits_type::pointer pointer; - typedef typename allocator_traits_type::const_pointer const_pointer; - typedef typename allocator_traits_type::reference reference; - typedef typename allocator_traits_type::const_reference const_reference; - typedef typename impl_tree_t::size_type size_type; - typedef typename impl_tree_t::difference_type difference_type; - - typedef container_detail::flat_tree_value_compare - < Pred - , container_detail::select1st< std::pair > - , std::pair > value_compare; - typedef Pred key_compare; - typedef typename container_detail:: - get_flat_tree_iterators::iterator iterator; - typedef typename container_detail:: - get_flat_tree_iterators::const_iterator const_iterator; - typedef typename container_detail:: - get_flat_tree_iterators - ::reverse_iterator reverse_iterator; - typedef typename container_detail:: - get_flat_tree_iterators - ::const_reverse_iterator const_reverse_iterator; - typedef A allocator_type; - - //!Standard extension - typedef A stored_allocator_type; - - //!Standard extension for C++03 compilers with non-movable std::pair - typedef impl_value_type movable_value_type; + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// + typedef Key key_type; + typedef T mapped_type; + typedef std::pair value_type; + typedef typename boost::container::allocator_traits::pointer pointer; + typedef typename boost::container::allocator_traits::const_pointer const_pointer; + typedef typename boost::container::allocator_traits::reference reference; + typedef typename boost::container::allocator_traits::const_reference const_reference; + typedef typename boost::container::allocator_traits::size_type size_type; + typedef typename boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef BOOST_CONTAINER_IMPDEF(Allocator) stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare; + typedef Compare key_compare; + typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator; + typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator; + typedef BOOST_CONTAINER_IMPDEF(reverse_iterator_impl) reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(const_reverse_iterator_impl) const_reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(impl_value_type) movable_value_type; public: + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// + //! Effects: Default constructs an empty flat_map. //! //! Complexity: Constant. @@ -183,7 +171,7 @@ class flat_map //! comparison object and allocator. //! //! Complexity: Constant. - explicit flat_map(const Pred& comp, const allocator_type& a = allocator_type()) + explicit flat_map(const Compare& comp, const allocator_type& a = allocator_type()) : m_flat_tree(comp, container_detail::force(a)) {} //! Effects: Constructs an empty flat_map using the specified comparison object and @@ -192,10 +180,10 @@ class flat_map //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template - flat_map(InputIterator first, InputIterator last, const Pred& comp = Pred(), + flat_map(InputIterator first, InputIterator last, const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, container_detail::force(a)) - { m_flat_tree.insert_unique(first, last); } + : m_flat_tree(true, first, last, comp, container_detail::force(a)) + {} //! Effects: Constructs an empty flat_map using the specified comparison object and //! allocator, and inserts elements from the ordered unique range [first ,last). This function @@ -209,7 +197,7 @@ class flat_map //! Note: Non-standard extension. template flat_map( ordered_unique_range_t, InputIterator first, InputIterator last - , const Pred& comp = Pred(), const allocator_type& a = allocator_type()) + , const Compare& comp = Compare(), const allocator_type& a = allocator_type()) : m_flat_tree(ordered_range, first, last, comp, a) {} @@ -259,20 +247,6 @@ class flat_map flat_map& operator=(BOOST_RV_REF(flat_map) mx) { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return container_detail::force_copy(m_flat_tree.key_comp()); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return value_compare(container_detail::force_copy(m_flat_tree.key_comp())); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -280,11 +254,31 @@ class flat_map allocator_type get_allocator() const { return container_detail::force_copy(m_flat_tree.get_allocator()); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() + { return container_detail::force(m_flat_tree.get_stored_allocator()); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const { return container_detail::force(m_flat_tree.get_stored_allocator()); } - stored_allocator_type &get_stored_allocator() - { return container_detail::force(m_flat_tree.get_stored_allocator()); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the container. //! @@ -388,6 +382,12 @@ class flat_map const_reverse_iterator crend() const { return container_detail::force_copy(m_flat_tree.crend()); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -412,11 +412,47 @@ class flat_map size_type max_size() const { return m_flat_tree.max_size(); } + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type capacity() const + { return m_flat_tree.capacity(); } + + //! Effects: If n is less than or equal to capacity(), this call has no + //! effect. Otherwise, it is a request for allocation of additional memory. + //! If the request is successful, then capacity() is greater than or equal to + //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. + //! + //! Throws: If memory allocation allocation throws or T's copy constructor throws. + //! + //! Note: If capacity() is less than "count", iterators and references to + //! to values might be invalidated. + void reserve(size_type count_) + { m_flat_tree.reserve(count_); } + + //! Effects: Tries to deallocate the excess of memory created + // with previous allocations. The size of the vector is unchanged + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { m_flat_tree.shrink_to_fit(); } + + ////////////////////////////////////////////// + // + // element access + // + ////////////////////////////////////////////// + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: If there is no key equivalent to x in the flat_map, inserts //! value_type(x, T()) into the flat_map. //! - //! Returns: A reference to the mapped_type corresponding to x in *this. + //! Returns: Allocator reference to the mapped_type corresponding to x in *this. //! //! Complexity: Logarithmic. mapped_type &operator[](const key_type& k); @@ -424,17 +460,19 @@ class flat_map //! Effects: If there is no key equivalent to x in the flat_map, inserts //! value_type(move(x), T()) into the flat_map (the key is move-constructed) //! - //! Returns: A reference to the mapped_type corresponding to x in *this. + //! Returns: Allocator reference to the mapped_type corresponding to x in *this. //! //! Complexity: Logarithmic. mapped_type &operator[](key_type &&k) ; #else - BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, priv_subscript) + BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, this->priv_subscript) #endif - //! Returns: A reference to the element whose key is equivalent to x. + //! Returns: Allocator reference to the element whose key is equivalent to x. + //! //! Throws: An exception object of type out_of_range if no such element is present. + //! //! Complexity: logarithmic. T& at(const key_type& k) { @@ -445,8 +483,10 @@ class flat_map return i->second; } - //! Returns: A reference to the element whose key is equivalent to x. + //! Returns: Allocator reference to the element whose key is equivalent to x. + //! //! Throws: An exception object of type out_of_range if no such element is present. + //! //! Complexity: logarithmic. const T& at(const key_type& k) const { @@ -457,13 +497,69 @@ class flat_map return i->second; } - //! Effects: Swaps the contents of *this and x. + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// + + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Effects: Inserts an object x of type T constructed with + //! std::forward(args)... if and only if there is no element in the container + //! with key equivalent to the key of x. //! - //! Throws: Nothing. + //! Returns: The bool component of the returned pair is true if and only + //! if the insertion takes place, and the iterator component of the pair + //! points to the element with key equivalent to the key of x. //! - //! Complexity: Constant. - void swap(flat_map& x) - { m_flat_tree.swap(x.m_flat_tree); } + //! Complexity: Logarithmic search time plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + template + std::pair emplace(Args&&... args) + { return container_detail::force_copy< std::pair >(m_flat_tree.emplace_unique(boost::forward(args)...)); } + + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... in the container if and only if there is + //! no element in the container with key equivalent to the key of x. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic search time (constant if x is inserted + //! right before p) plus insertion linear to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + template + iterator emplace_hint(const_iterator hint, Args&&... args) + { + return container_detail::force_copy + (m_flat_tree.emplace_hint_unique( container_detail::force_copy(hint) + , boost::forward(args)...)); + } + + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + std::pair emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy< std::pair > \ + (m_flat_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy(m_flat_tree.emplace_hint_unique \ + (container_detail::force_copy(hint) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Inserts x if and only if there is no element in the container //! with key equivalent to the key of x. @@ -591,64 +687,6 @@ class flat_map void insert(ordered_unique_range_t, InputIterator first, InputIterator last) { m_flat_tree.insert_unique(ordered_unique_range, first, last); } - #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - //! Effects: Inserts an object x of type T constructed with - //! std::forward(args)... if and only if there is no element in the container - //! with key equivalent to the key of x. - //! - //! Returns: The bool component of the returned pair is true if and only - //! if the insertion takes place, and the iterator component of the pair - //! points to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic search time plus linear insertion - //! to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - template - std::pair emplace(Args&&... args) - { return container_detail::force_copy< std::pair >(m_flat_tree.emplace_unique(boost::forward(args)...)); } - - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the container if and only if there is - //! no element in the container with key equivalent to the key of x. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic search time (constant if x is inserted - //! right before p) plus insertion linear to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - template - iterator emplace_hint(const_iterator hint, Args&&... args) - { - return container_detail::force_copy - (m_flat_tree.emplace_hint_unique( container_detail::force_copy(hint) - , boost::forward(args)...)); - } - - #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - - #define BOOST_PP_LOCAL_MACRO(n) \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - std::pair emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { return container_detail::force_copy< std::pair > \ - (m_flat_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ - \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - iterator emplace_hint(const_iterator hint \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { return container_detail::force_copy(m_flat_tree.emplace_hint_unique \ - (container_detail::force_copy(hint) \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ - //! - #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately @@ -689,6 +727,14 @@ class flat_map , container_detail::force_copy(last))); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(flat_map& x) + { m_flat_tree.swap(x.m_flat_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -697,14 +743,31 @@ class flat_map void clear() { m_flat_tree.clear(); } - //! Effects: Tries to deallocate the excess of memory created - // with previous allocations. The size of the vector is unchanged + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Complexity: Constant. + key_compare key_comp() const + { return container_detail::force_copy(m_flat_tree.key_comp()); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. //! - //! Complexity: Linear to size(). - void shrink_to_fit() - { m_flat_tree.shrink_to_fit(); } + //! Complexity: Constant. + value_compare value_comp() const + { return value_compare(container_detail::force_copy(m_flat_tree.key_comp())); } + + ////////////////////////////////////////////// + // + // map operations + // + ////////////////////////////////////////////// //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. @@ -713,7 +776,7 @@ class flat_map iterator find(const key_type& x) { return container_detail::force_copy(m_flat_tree.find(x)); } - //! Returns: A const_iterator pointing to an element with the key + //! Returns: Allocator const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic.s @@ -733,7 +796,7 @@ class flat_map iterator lower_bound(const key_type& x) { return container_detail::force_copy(m_flat_tree.lower_bound(x)); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -747,7 +810,7 @@ class flat_map iterator upper_bound(const key_type& x) { return container_detail::force_copy(m_flat_tree.upper_bound(x)); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -766,27 +829,6 @@ class flat_map std::pair equal_range(const key_type& x) const { return container_detail::force_copy >(m_flat_tree.equal_range(x)); } - //! Effects: Number of elements for which memory has been allocated. - //! capacity() is always greater than or equal to size(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type capacity() const - { return m_flat_tree.capacity(); } - - //! Effects: If n is less than or equal to capacity(), this call has no - //! effect. Otherwise, it is a request for allocation of additional memory. - //! If the request is successful, then capacity() is greater than or equal to - //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! - //! Throws: If memory allocation allocation throws or T's copy constructor throws. - //! - //! Note: If capacity() is less than "count", iterators and references to - //! to values might be invalidated. - void reserve(size_type count) - { m_flat_tree.reserve(count); } - /// @cond template friend bool operator== (const flat_map&, @@ -820,39 +862,39 @@ class flat_map /// @endcond }; -template -inline bool operator==(const flat_map& x, - const flat_map& y) +template +inline bool operator==(const flat_map& x, + const flat_map& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_map& x, - const flat_map& y) +template +inline bool operator<(const flat_map& x, + const flat_map& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_map& x, - const flat_map& y) +template +inline bool operator!=(const flat_map& x, + const flat_map& y) { return !(x == y); } -template -inline bool operator>(const flat_map& x, - const flat_map& y) +template +inline bool operator>(const flat_map& x, + const flat_map& y) { return y < x; } -template -inline bool operator<=(const flat_map& x, - const flat_map& y) +template +inline bool operator<=(const flat_map& x, + const flat_map& y) { return !(y < x); } -template -inline bool operator>=(const flat_map& x, - const flat_map& y) +template +inline bool operator>=(const flat_map& x, + const flat_map& y) { return !(x < y); } -template -inline void swap(flat_map& x, - flat_map& y) +template +inline void swap(flat_map& x, + flat_map& y) { x.swap(y); } /// @cond @@ -861,29 +903,25 @@ inline void swap(flat_map& x, /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ namespace container { // Forward declaration of operators < and ==, needed for friend declaration. -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template >, class A = std::allocator > -#else -template -#endif +template class flat_multimap; -template -inline bool operator==(const flat_multimap& x, - const flat_multimap& y); +template +inline bool operator==(const flat_multimap& x, + const flat_multimap& y); -template -inline bool operator<(const flat_multimap& x, - const flat_multimap& y); +template +inline bool operator<(const flat_multimap& x, + const flat_multimap& y); /// @endcond //! A flat_multimap is a kind of associative container that supports equivalent keys @@ -896,14 +934,14 @@ inline bool operator<(const flat_multimap& x, //! flat_multimap the key_type is Key and the value_type is std::pair //! (unlike std::multimap which value_type is std::pair<const Key, T>). //! -//! Pred is the ordering function for Keys (e.g. std::less). +//! Compare is the ordering function for Keys (e.g. std::less). //! -//! A is the allocator to allocate the value_types +//! Allocator is the allocator to allocate the value_types //! (e.g. allocator< std::pair >). #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template >, class A = std::allocator > +template , class Allocator = std::allocator< std::pair< Key, T> > > #else -template +template #endif class flat_multimap { @@ -913,65 +951,65 @@ class flat_multimap typedef container_detail::flat_tree, container_detail::select1st< std::pair >, - Pred, - A> tree_t; + Compare, + Allocator> tree_t; //This is the real tree stored here. It's based on a movable pair typedef container_detail::flat_tree, container_detail::select1st >, - Pred, - typename allocator_traits::template portable_rebind_alloc + Compare, + typename allocator_traits::template portable_rebind_alloc >::type> impl_tree_t; impl_tree_t m_flat_tree; // flat tree representing flat_map typedef typename impl_tree_t::value_type impl_value_type; - typedef typename impl_tree_t::pointer impl_pointer; - typedef typename impl_tree_t::const_pointer impl_const_pointer; - typedef typename impl_tree_t::reference impl_reference; - typedef typename impl_tree_t::const_reference impl_const_reference; - typedef typename impl_tree_t::value_compare impl_value_compare; - typedef typename impl_tree_t::iterator impl_iterator; typedef typename impl_tree_t::const_iterator impl_const_iterator; - typedef typename impl_tree_t::reverse_iterator impl_reverse_iterator; - typedef typename impl_tree_t::const_reverse_iterator impl_const_reverse_iterator; typedef typename impl_tree_t::allocator_type impl_allocator_type; - typedef allocator_traits allocator_traits_type; - + typedef container_detail::flat_tree_value_compare + < Compare + , container_detail::select1st< std::pair > + , std::pair > value_compare_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::iterator iterator_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::const_iterator const_iterator_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::reverse_iterator reverse_iterator_impl; + typedef typename container_detail::get_flat_tree_iterators + ::pointer>::const_reverse_iterator const_reverse_iterator_impl; /// @endcond public: - // typedefs: - typedef Key key_type; - typedef T mapped_type; - typedef Pred key_compare; - typedef typename std::pair value_type; - typedef typename allocator_traits_type::pointer pointer; - typedef typename allocator_traits_type::const_pointer const_pointer; - typedef typename allocator_traits_type::reference reference; - typedef typename allocator_traits_type::const_reference const_reference; - typedef typename impl_tree_t::size_type size_type; - typedef typename impl_tree_t::difference_type difference_type; - typedef container_detail::flat_tree_value_compare - < Pred - , container_detail::select1st< std::pair > - , std::pair > value_compare; + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// + typedef Key key_type; + typedef T mapped_type; + typedef std::pair value_type; + typedef typename boost::container::allocator_traits::pointer pointer; + typedef typename boost::container::allocator_traits::const_pointer const_pointer; + typedef typename boost::container::allocator_traits::reference reference; + typedef typename boost::container::allocator_traits::const_reference const_reference; + typedef typename boost::container::allocator_traits::size_type size_type; + typedef typename boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef BOOST_CONTAINER_IMPDEF(Allocator) stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare; + typedef Compare key_compare; + typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator; + typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator; + typedef BOOST_CONTAINER_IMPDEF(reverse_iterator_impl) reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(const_reverse_iterator_impl) const_reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(impl_value_type) movable_value_type; - typedef typename container_detail:: - get_flat_tree_iterators::iterator iterator; - typedef typename container_detail:: - get_flat_tree_iterators::const_iterator const_iterator; - typedef typename container_detail:: - get_flat_tree_iterators - ::reverse_iterator reverse_iterator; - typedef typename container_detail:: - get_flat_tree_iterators - ::const_reverse_iterator const_reverse_iterator; - typedef A allocator_type; - //Non-standard extension - typedef A stored_allocator_type; - //!Standard extension for C++03 compilers with non-movable std::pair - typedef impl_value_type movable_value_type; + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructs an empty flat_map. //! @@ -983,7 +1021,7 @@ class flat_multimap //! object and allocator. //! //! Complexity: Constant. - explicit flat_multimap(const Pred& comp, + explicit flat_multimap(const Compare& comp, const allocator_type& a = allocator_type()) : m_flat_tree(comp, container_detail::force(a)) { } @@ -994,10 +1032,10 @@ class flat_multimap //! comp and otherwise N logN, where N is last - first. template flat_multimap(InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, container_detail::force(a)) - { m_flat_tree.insert_equal(first, last); } + : m_flat_tree(false, first, last, comp, container_detail::force(a)) + {} //! Effects: Constructs an empty flat_multimap using the specified comparison object and //! allocator, and inserts elements from the ordered range [first ,last). This function @@ -1010,7 +1048,7 @@ class flat_multimap //! Note: Non-standard extension. template flat_multimap(ordered_range_t, InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) : m_flat_tree(ordered_range, first, last, comp, a) {} @@ -1028,7 +1066,7 @@ class flat_multimap //! Postcondition: x is emptied. flat_multimap(BOOST_RV_REF(flat_multimap) x) : m_flat_tree(boost::move(x.m_flat_tree)) - { } + {} //! Effects: Copy constructs a flat_multimap using the specified allocator. //! @@ -1057,20 +1095,6 @@ class flat_multimap flat_multimap& operator=(BOOST_RV_REF(flat_multimap) mx) { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return container_detail::force_copy(m_flat_tree.key_comp()); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return value_compare(container_detail::force_copy(m_flat_tree.key_comp())); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -1078,11 +1102,31 @@ class flat_multimap allocator_type get_allocator() const { return container_detail::force_copy(m_flat_tree.get_allocator()); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() + { return container_detail::force(m_flat_tree.get_stored_allocator()); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const { return container_detail::force(m_flat_tree.get_stored_allocator()); } - stored_allocator_type &get_stored_allocator() - { return container_detail::force(m_flat_tree.get_stored_allocator()); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the container. //! @@ -1186,6 +1230,12 @@ class flat_multimap const_reverse_iterator crend() const { return container_detail::force_copy(m_flat_tree.crend()); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -1210,13 +1260,94 @@ class flat_multimap size_type max_size() const { return m_flat_tree.max_size(); } - //! Effects: Swaps the contents of *this and x. + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). //! //! Throws: Nothing. //! //! Complexity: Constant. - void swap(flat_multimap& x) - { m_flat_tree.swap(x.m_flat_tree); } + size_type capacity() const + { return m_flat_tree.capacity(); } + + //! Effects: If n is less than or equal to capacity(), this call has no + //! effect. Otherwise, it is a request for allocation of additional memory. + //! If the request is successful, then capacity() is greater than or equal to + //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. + //! + //! Throws: If memory allocation allocation throws or T's copy constructor throws. + //! + //! Note: If capacity() is less than "count", iterators and references to + //! to values might be invalidated. + void reserve(size_type count_) + { m_flat_tree.reserve(count_); } + + //! Effects: Tries to deallocate the excess of memory created + // with previous allocations. The size of the vector is unchanged + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { m_flat_tree.shrink_to_fit(); } + + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// + + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... and returns the iterator pointing to the + //! newly inserted element. + //! + //! Complexity: Logarithmic search time plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + template + iterator emplace(Args&&... args) + { return container_detail::force_copy(m_flat_tree.emplace_equal(boost::forward(args)...)); } + + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic search time (constant time if the value + //! is to be inserted before p) plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + template + iterator emplace_hint(const_iterator hint, Args&&... args) + { + return container_detail::force_copy(m_flat_tree.emplace_hint_equal + (container_detail::force_copy(hint), boost::forward(args)...)); + } + + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy(m_flat_tree.emplace_equal \ + (BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace_hint(const_iterator hint \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { return container_detail::force_copy(m_flat_tree.emplace_hint_equal \ + (container_detail::force_copy(hint) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING //! Effects: Inserts x and returns the iterator pointing to the //! newly inserted element. @@ -1332,59 +1463,6 @@ class flat_multimap void insert(ordered_range_t, InputIterator first, InputIterator last) { m_flat_tree.insert_equal(ordered_range, first, last); } - #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... and returns the iterator pointing to the - //! newly inserted element. - //! - //! Complexity: Logarithmic search time plus linear insertion - //! to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - template - iterator emplace(Args&&... args) - { return container_detail::force_copy(m_flat_tree.emplace_equal(boost::forward(args)...)); } - - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic search time (constant time if the value - //! is to be inserted before p) plus linear insertion - //! to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - template - iterator emplace_hint(const_iterator hint, Args&&... args) - { - return container_detail::force_copy(m_flat_tree.emplace_hint_equal - (container_detail::force_copy(hint), boost::forward(args)...)); - } - - #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - - #define BOOST_PP_LOCAL_MACRO(n) \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { return container_detail::force_copy(m_flat_tree.emplace_equal \ - (BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ - \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - iterator emplace_hint(const_iterator hint \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { return container_detail::force_copy(m_flat_tree.emplace_hint_equal \ - (container_detail::force_copy(hint) \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); } \ - //! - #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately @@ -1425,6 +1503,14 @@ class flat_multimap , container_detail::force_copy(last))); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(flat_multimap& x) + { m_flat_tree.swap(x.m_flat_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -1433,14 +1519,31 @@ class flat_multimap void clear() { m_flat_tree.clear(); } - //! Effects: Tries to deallocate the excess of memory created - // with previous allocations. The size of the vector is unchanged + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Complexity: Constant. + key_compare key_comp() const + { return container_detail::force_copy(m_flat_tree.key_comp()); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. //! - //! Complexity: Linear to size(). - void shrink_to_fit() - { m_flat_tree.shrink_to_fit(); } + //! Complexity: Constant. + value_compare value_comp() const + { return value_compare(container_detail::force_copy(m_flat_tree.key_comp())); } + + ////////////////////////////////////////////// + // + // map operations + // + ////////////////////////////////////////////// //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. @@ -1467,9 +1570,9 @@ class flat_multimap //! //! Complexity: Logarithmic iterator lower_bound(const key_type& x) - {return container_detail::force_copy(m_flat_tree.lower_bound(x)); } + { return container_detail::force_copy(m_flat_tree.lower_bound(x)); } - //! Returns: A const iterator pointing to the first element with key + //! Returns: Allocator const iterator pointing to the first element with key //! not less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1483,7 +1586,7 @@ class flat_multimap iterator upper_bound(const key_type& x) {return container_detail::force_copy(m_flat_tree.upper_bound(x)); } - //! Returns: A const iterator pointing to the first element with key + //! Returns: Allocator const iterator pointing to the first element with key //! not less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1499,31 +1602,9 @@ class flat_multimap //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair equal_range(const key_type& x) const { return container_detail::force_copy >(m_flat_tree.equal_range(x)); } - //! Effects: Number of elements for which memory has been allocated. - //! capacity() is always greater than or equal to size(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type capacity() const - { return m_flat_tree.capacity(); } - - //! Effects: If n is less than or equal to capacity(), this call has no - //! effect. Otherwise, it is a request for allocation of additional memory. - //! If the request is successful, then capacity() is greater than or equal to - //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! - //! Throws: If memory allocation allocation throws or T's copy constructor throws. - //! - //! Note: If capacity() is less than "count", iterators and references to - //! to values might be invalidated. - void reserve(size_type count) - { m_flat_tree.reserve(count); } - /// @cond template friend bool operator== (const flat_multimap& x, @@ -1535,38 +1616,38 @@ class flat_multimap /// @endcond }; -template -inline bool operator==(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator==(const flat_multimap& x, + const flat_multimap& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator<(const flat_multimap& x, + const flat_multimap& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator!=(const flat_multimap& x, + const flat_multimap& y) { return !(x == y); } -template -inline bool operator>(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator>(const flat_multimap& x, + const flat_multimap& y) { return y < x; } -template -inline bool operator<=(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator<=(const flat_multimap& x, + const flat_multimap& y) { return !(y < x); } -template -inline bool operator>=(const flat_multimap& x, - const flat_multimap& y) +template +inline bool operator>=(const flat_multimap& x, + const flat_multimap& y) { return !(x < y); } -template -inline void swap(flat_multimap& x, flat_multimap& y) +template +inline void swap(flat_multimap& x, flat_multimap& y) { x.swap(y); } }} @@ -1577,10 +1658,10 @@ namespace boost { /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move< boost::container::flat_multimap > +template +struct has_trivial_destructor_after_move< boost::container::flat_multimap > { - static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ } //namespace boost { diff --git a/3party/boost/boost/container/flat_set.hpp b/3party/boost/boost/container/flat_set.hpp index 09c95eb2f5..b6266e6879 100644 --- a/3party/boost/boost/container/flat_set.hpp +++ b/3party/boost/boost/container/flat_set.hpp @@ -24,33 +24,30 @@ #include #include #include +#include #include +#include -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { namespace container { -#else -namespace boost { -namespace container { -#endif /// @cond // Forward declarations of operators < and ==, needed for friend declaration. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template , class A = std::allocator > +template , class Allocator = std::allocator > #else -template +template #endif class flat_set; -template -inline bool operator==(const flat_set& x, - const flat_set& y); +template +inline bool operator==(const flat_set& x, + const flat_set& y); -template -inline bool operator<(const flat_set& x, - const flat_set& y); +template +inline bool operator<(const flat_set& x, + const flat_set& y); /// @endcond //! flat_set is a Sorted Associative Container that stores objects of type Key. @@ -65,40 +62,48 @@ inline bool operator<(const flat_set& x, //! Erasing an element of a flat_set invalidates iterators and references //! pointing to elements that come after (their keys are bigger) the erased element. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template , class A = std::allocator > +template , class Allocator = std::allocator > #else -template +template #endif class flat_set { /// @cond private: BOOST_COPYABLE_AND_MOVABLE(flat_set) - typedef container_detail::flat_tree, Pred, A> tree_t; + typedef container_detail::flat_tree, Compare, Allocator> tree_t; tree_t m_flat_tree; // flat tree representing flat_set - typedef typename container_detail:: - move_const_ref_type::type insert_const_ref_type; /// @endcond public: + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// + typedef Key key_type; + typedef Key value_type; + typedef Compare key_compare; + typedef Compare value_compare; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator; - // typedefs: - typedef typename tree_t::key_type key_type; - typedef typename tree_t::value_type value_type; - typedef typename tree_t::pointer pointer; - typedef typename tree_t::const_pointer const_pointer; - typedef typename tree_t::reference reference; - typedef typename tree_t::const_reference const_reference; - typedef typename tree_t::key_compare key_compare; - typedef typename tree_t::value_compare value_compare; - typedef typename tree_t::iterator iterator; - typedef typename tree_t::const_iterator const_iterator; - typedef typename tree_t::reverse_iterator reverse_iterator; - typedef typename tree_t::const_reverse_iterator const_reverse_iterator; - typedef typename tree_t::size_type size_type; - typedef typename tree_t::difference_type difference_type; - typedef typename tree_t::allocator_type allocator_type; - typedef typename tree_t::stored_allocator_type stored_allocator_type; + public: + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructs an empty flat_set. //! @@ -111,7 +116,7 @@ class flat_set //! comparison object and allocator. //! //! Complexity: Constant. - explicit flat_set(const Pred& comp, + explicit flat_set(const Compare& comp, const allocator_type& a = allocator_type()) : m_flat_tree(comp, a) {} @@ -123,10 +128,10 @@ class flat_set //! comp and otherwise N logN, where N is last - first. template flat_set(InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, a) - { m_flat_tree.insert_unique(first, last); } + : m_flat_tree(true, first, last, comp, a) + {} //! Effects: Constructs an empty flat_set using the specified comparison object and //! allocator, and inserts elements from the ordered unique range [first ,last). This function @@ -140,7 +145,7 @@ class flat_set //! Note: Non-standard extension. template flat_set(ordered_unique_range_t, InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) : m_flat_tree(ordered_range, first, last, comp, a) {} @@ -188,20 +193,6 @@ class flat_set flat_set& operator=(BOOST_RV_REF(flat_set) mx) { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return m_flat_tree.key_comp(); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return m_flat_tree.key_comp(); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -209,11 +200,31 @@ class flat_set allocator_type get_allocator() const { return m_flat_tree.get_allocator(); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() + { return m_flat_tree.get_stored_allocator(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const { return m_flat_tree.get_stored_allocator(); } - stored_allocator_type &get_stored_allocator() - { return m_flat_tree.get_stored_allocator(); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the container. //! @@ -231,14 +242,6 @@ class flat_set const_iterator begin() const { return m_flat_tree.begin(); } - //! Effects: Returns a const_iterator to the first element contained in the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cbegin() const - { return m_flat_tree.cbegin(); } - //! Effects: Returns an iterator to the end of the container. //! //! Throws: Nothing. @@ -255,14 +258,6 @@ class flat_set const_iterator end() const { return m_flat_tree.end(); } - //! Effects: Returns a const_iterator to the end of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cend() const - { return m_flat_tree.cend(); } - //! Effects: Returns a reverse_iterator pointing to the beginning //! of the reversed container. //! @@ -281,15 +276,6 @@ class flat_set const_reverse_iterator rbegin() const { return m_flat_tree.rbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return m_flat_tree.crbegin(); } - //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed container. //! @@ -308,6 +294,31 @@ class flat_set const_reverse_iterator rend() const { return m_flat_tree.rend(); } + //! Effects: Returns a const_iterator to the first element contained in the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const + { return m_flat_tree.cbegin(); } + + //! Effects: Returns a const_iterator to the end of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const + { return m_flat_tree.cend(); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const + { return m_flat_tree.crbegin(); } + //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed container. //! @@ -317,6 +328,13 @@ class flat_set const_reverse_iterator crend() const { return m_flat_tree.crend(); } + + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -341,117 +359,45 @@ class flat_set size_type max_size() const { return m_flat_tree.max_size(); } - //! Effects: Swaps the contents of *this and x. + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). //! //! Throws: Nothing. //! //! Complexity: Constant. - void swap(flat_set& x) - { m_flat_tree.swap(x.m_flat_tree); } + size_type capacity() const + { return m_flat_tree.capacity(); } - //! Effects: Inserts x if and only if there is no element in the container - //! with key equivalent to the key of x. + //! Effects: If n is less than or equal to capacity(), this call has no + //! effect. Otherwise, it is a request for allocation of additional memory. + //! If the request is successful, then capacity() is greater than or equal to + //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. //! - //! Returns: The bool component of the returned pair is true if and only - //! if the insertion takes place, and the iterator component of the pair - //! points to the element with key equivalent to the key of x. + //! Throws: If memory allocation allocation throws or Key's copy constructor throws. //! - //! Complexity: Logarithmic search time plus linear insertion - //! to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - std::pair insert(insert_const_ref_type x) - { return priv_insert(x); } + //! Note: If capacity() is less than "count", iterators and references to + //! to values might be invalidated. + void reserve(size_type count_) + { m_flat_tree.reserve(count_); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - std::pair insert(T &x) - { return this->insert(const_cast(x)); } + //! Effects: Tries to deallocate the excess of memory created + // with previous allocations. The size of the vector is unchanged + //! + //! Throws: If memory allocation throws, or Key's copy constructor throws. + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { m_flat_tree.shrink_to_fit(); } - template - std::pair insert(const U &u, typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(u); } - #endif - - //! Effects: Inserts a new value_type move constructed from the pair if and - //! only if there is no element in the container with key equivalent to the key of x. - //! - //! Returns: The bool component of the returned pair is true if and only - //! if the insertion takes place, and the iterator component of the pair - //! points to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic search time plus linear insertion - //! to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - std::pair insert(BOOST_RV_REF(value_type) x) - { return m_flat_tree.insert_unique(boost::move(x)); } - - //! Effects: Inserts a copy of x in the container if and only if there is - //! no element in the container with key equivalent to the key of x. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic search time (constant if x is inserted - //! right before p) plus insertion linear to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - iterator insert(const_iterator p, insert_const_ref_type x) - { return priv_insert(p, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) - { return this->insert(position, const_cast(x)); } - - template - iterator insert(const_iterator position, const U &u, typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(position, u); } - #endif - - //! Effects: Inserts an element move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic search time (constant if x is inserted - //! right before p) plus insertion linear to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_RV_REF(value_type) x) - { return m_flat_tree.insert_unique(position, boost::move(x)); } - - //! Requires: first, last are not iterators into *this. - //! - //! Effects: inserts each element from the range [first,last) if and only - //! if there is no element with key equivalent to the key of that element. - //! - //! Complexity: At most N log(size()+N) (N is the distance from first to last) - //! search time plus N*size() insertion time. - //! - //! Note: If an element is inserted it might invalidate elements. - template - void insert(InputIterator first, InputIterator last) - { m_flat_tree.insert_unique(first, last); } - - //! Requires: first, last are not iterators into *this and - //! must be ordered according to the predicate and must be - //! unique values. - //! - //! Effects: inserts each element from the range [first,last) .This function - //! is more efficient than the normal range creation for ordered ranges. - //! - //! Complexity: At most N log(size()+N) (N is the distance from first to last) - //! search time plus N*size() insertion time. - //! - //! Note: Non-standard extension. If an element is inserted it might invalidate elements. - template - void insert(ordered_unique_range_t, InputIterator first, InputIterator last) - { m_flat_tree.insert_unique(ordered_unique_range, first, last); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts an object x of type T constructed with + //! Effects: Inserts an object x of type Key constructed with //! std::forward(args)... if and only if there is no element in the container //! with key equivalent to the key of x. //! @@ -467,7 +413,7 @@ class flat_set std::pair emplace(Args&&... args) { return m_flat_tree.emplace_unique(boost::forward(args)...); } - //! Effects: Inserts an object of type T constructed with + //! Effects: Inserts an object of type Key constructed with //! std::forward(args)... in the container if and only if there is //! no element in the container with key equivalent to the key of x. //! p is a hint pointing to where the insert should start to search. @@ -501,6 +447,95 @@ class flat_set #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts x if and only if there is no element in the container + //! with key equivalent to the key of x. + //! + //! Returns: The bool component of the returned pair is true if and only + //! if the insertion takes place, and the iterator component of the pair + //! points to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic search time plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + std::pair insert(const value_type &x); + + //! Effects: Inserts a new value_type move constructed from the pair if and + //! only if there is no element in the container with key equivalent to the key of x. + //! + //! Returns: The bool component of the returned pair is true if and only + //! if the insertion takes place, and the iterator component of the pair + //! points to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic search time plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + std::pair insert(value_type &&x); + #else + private: + typedef std::pair insert_return_pair; + public: + BOOST_MOVE_CONVERSION_AWARE_CATCH(insert, value_type, insert_return_pair, this->priv_insert) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x in the container if and only if there is + //! no element in the container with key equivalent to the key of x. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic search time (constant if x is inserted + //! right before p) plus insertion linear to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator p, const value_type &x); + + //! Effects: Inserts an element move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic search time (constant if x is inserted + //! right before p) plus insertion linear to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, value_type &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator) + #endif + + //! Requires: first, last are not iterators into *this. + //! + //! Effects: inserts each element from the range [first,last) if and only + //! if there is no element with key equivalent to the key of that element. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: If an element is inserted it might invalidate elements. + template + void insert(InputIterator first, InputIterator last) + { m_flat_tree.insert_unique(first, last); } + + //! Requires: first, last are not iterators into *this and + //! must be ordered according to the predicate and must be + //! unique values. + //! + //! Effects: inserts each element from the range [first,last) .This function + //! is more efficient than the normal range creation for ordered ranges. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: Non-standard extension. If an element is inserted it might invalidate elements. + template + void insert(ordered_unique_range_t, InputIterator first, InputIterator last) + { m_flat_tree.insert_unique(ordered_unique_range, first, last); } + //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately @@ -534,6 +569,14 @@ class flat_set iterator erase(const_iterator first, const_iterator last) { return m_flat_tree.erase(first, last); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(flat_set& x) + { m_flat_tree.swap(x.m_flat_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -542,14 +585,31 @@ class flat_set void clear() { m_flat_tree.clear(); } - //! Effects: Tries to deallocate the excess of memory created - // with previous allocations. The size of the vector is unchanged + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Complexity: Constant. + key_compare key_comp() const + { return m_flat_tree.key_comp(); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. //! - //! Complexity: Linear to size(). - void shrink_to_fit() - { m_flat_tree.shrink_to_fit(); } + //! Complexity: Constant. + value_compare value_comp() const + { return m_flat_tree.key_comp(); } + + ////////////////////////////////////////////// + // + // set operations + // + ////////////////////////////////////////////// //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. @@ -558,7 +618,7 @@ class flat_set iterator find(const key_type& x) { return m_flat_tree.find(x); } - //! Returns: A const_iterator pointing to an element with the key + //! Returns: Allocator const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic.s @@ -578,7 +638,7 @@ class flat_set iterator lower_bound(const key_type& x) { return m_flat_tree.lower_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -592,7 +652,7 @@ class flat_set iterator upper_bound(const key_type& x) { return m_flat_tree.upper_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -602,38 +662,15 @@ class flat_set //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair equal_range(const key_type& x) const { return m_flat_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair equal_range(const key_type& x) { return m_flat_tree.equal_range(x); } - //! Effects: Number of elements for which memory has been allocated. - //! capacity() is always greater than or equal to size(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type capacity() const - { return m_flat_tree.capacity(); } - - //! Effects: If n is less than or equal to capacity(), this call has no - //! effect. Otherwise, it is a request for allocation of additional memory. - //! If the request is successful, then capacity() is greater than or equal to - //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! - //! Throws: If memory allocation allocation throws or T's copy constructor throws. - //! - //! Note: If capacity() is less than "count", iterators and references to - //! to values might be invalidated. - void reserve(size_type count) - { m_flat_tree.reserve(count); } - /// @cond template friend bool operator== (const flat_set&, const flat_set&); @@ -642,46 +679,48 @@ class flat_set friend bool operator< (const flat_set&, const flat_set&); private: - std::pair priv_insert(const T &x) - { return m_flat_tree.insert_unique(x); } + template + std::pair priv_insert(BOOST_FWD_REF(KeyType) x) + { return m_flat_tree.insert_unique(::boost::forward(x)); } - iterator priv_insert(const_iterator p, const T &x) - { return m_flat_tree.insert_unique(p, x); } + template + iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x) + { return m_flat_tree.insert_unique(p, ::boost::forward(x)); } /// @endcond }; -template -inline bool operator==(const flat_set& x, - const flat_set& y) +template +inline bool operator==(const flat_set& x, + const flat_set& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_set& x, - const flat_set& y) +template +inline bool operator<(const flat_set& x, + const flat_set& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_set& x, - const flat_set& y) +template +inline bool operator!=(const flat_set& x, + const flat_set& y) { return !(x == y); } -template -inline bool operator>(const flat_set& x, - const flat_set& y) +template +inline bool operator>(const flat_set& x, + const flat_set& y) { return y < x; } -template -inline bool operator<=(const flat_set& x, - const flat_set& y) +template +inline bool operator<=(const flat_set& x, + const flat_set& y) { return !(y < x); } -template -inline bool operator>=(const flat_set& x, - const flat_set& y) +template +inline bool operator>=(const flat_set& x, + const flat_set& y) { return !(x < y); } -template -inline void swap(flat_set& x, flat_set& y) +template +inline void swap(flat_set& x, flat_set& y) { x.swap(y); } /// @cond @@ -690,10 +729,10 @@ inline void swap(flat_set& x, flat_set& y) /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value &&has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value &&has_trivial_destructor::value; }; */ namespace container { @@ -701,19 +740,19 @@ namespace container { // Forward declaration of operators < and ==, needed for friend declaration. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template , class A = std::allocator > +template , class Allocator = std::allocator > #else -template +template #endif class flat_multiset; -template -inline bool operator==(const flat_multiset& x, - const flat_multiset& y); +template +inline bool operator==(const flat_multiset& x, + const flat_multiset& y); -template -inline bool operator<(const flat_multiset& x, - const flat_multiset& y); +template +inline bool operator<(const flat_multiset& x, + const flat_multiset& y); /// @endcond //! flat_multiset is a Sorted Associative Container that stores objects of type Key. @@ -728,39 +767,41 @@ inline bool operator<(const flat_multiset& x, //! Erasing an element of a flat_multiset invalidates iterators and references //! pointing to elements that come after (their keys are equal or bigger) the erased element. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template , class A = std::allocator > +template , class Allocator = std::allocator > #else -template +template #endif class flat_multiset { /// @cond private: BOOST_COPYABLE_AND_MOVABLE(flat_multiset) - typedef container_detail::flat_tree, Pred, A> tree_t; + typedef container_detail::flat_tree, Compare, Allocator> tree_t; tree_t m_flat_tree; // flat tree representing flat_multiset - typedef typename container_detail:: - move_const_ref_type::type insert_const_ref_type; /// @endcond public: - // typedefs: - typedef typename tree_t::key_type key_type; - typedef typename tree_t::value_type value_type; - typedef typename tree_t::pointer pointer; - typedef typename tree_t::const_pointer const_pointer; - typedef typename tree_t::reference reference; - typedef typename tree_t::const_reference const_reference; - typedef typename tree_t::key_compare key_compare; - typedef typename tree_t::value_compare value_compare; - typedef typename tree_t::iterator iterator; - typedef typename tree_t::const_iterator const_iterator; - typedef typename tree_t::reverse_iterator reverse_iterator; - typedef typename tree_t::const_reverse_iterator const_reverse_iterator; - typedef typename tree_t::size_type size_type; - typedef typename tree_t::difference_type difference_type; - typedef typename tree_t::allocator_type allocator_type; - typedef typename tree_t::stored_allocator_type stored_allocator_type; + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// + typedef Key key_type; + typedef Key value_type; + typedef Compare key_compare; + typedef Compare value_compare; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator; //! Effects: Default constructs an empty flat_multiset. //! @@ -769,16 +810,16 @@ class flat_multiset : m_flat_tree() {} - explicit flat_multiset(const Pred& comp, + explicit flat_multiset(const Compare& comp, const allocator_type& a = allocator_type()) : m_flat_tree(comp, a) {} template flat_multiset(InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_flat_tree(comp, a) - { m_flat_tree.insert_equal(first, last); } + : m_flat_tree(false, first, last, comp, a) + {} //! Effects: Constructs an empty flat_multiset using the specified comparison object and //! allocator, and inserts elements from the ordered range [first ,last ). This function @@ -791,7 +832,7 @@ class flat_multiset //! Note: Non-standard extension. template flat_multiset(ordered_range_t, InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) : m_flat_tree(ordered_range, first, last, comp, a) {} @@ -839,20 +880,6 @@ class flat_multiset flat_multiset& operator=(BOOST_RV_REF(flat_multiset) mx) { m_flat_tree = boost::move(mx.m_flat_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return m_flat_tree.key_comp(); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return m_flat_tree.key_comp(); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -860,10 +887,24 @@ class flat_multiset allocator_type get_allocator() const { return m_flat_tree.get_allocator(); } - const stored_allocator_type &get_stored_allocator() const + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() { return m_flat_tree.get_stored_allocator(); } - stored_allocator_type &get_stored_allocator() + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const { return m_flat_tree.get_stored_allocator(); } //! Effects: Returns an iterator to the first element contained in the container. @@ -968,6 +1009,12 @@ class flat_multiset const_reverse_iterator crend() const { return m_flat_tree.crend(); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -992,108 +1039,45 @@ class flat_multiset size_type max_size() const { return m_flat_tree.max_size(); } - //! Effects: Swaps the contents of *this and x. + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). //! //! Throws: Nothing. //! //! Complexity: Constant. - void swap(flat_multiset& x) - { m_flat_tree.swap(x.m_flat_tree); } + size_type capacity() const + { return m_flat_tree.capacity(); } - //! Effects: Inserts x and returns the iterator pointing to the - //! newly inserted element. + //! Effects: If n is less than or equal to capacity(), this call has no + //! effect. Otherwise, it is a request for allocation of additional memory. + //! If the request is successful, then capacity() is greater than or equal to + //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. //! - //! Complexity: Logarithmic search time plus linear insertion - //! to the elements with bigger keys than x. + //! Throws: If memory allocation allocation throws or Key's copy constructor throws. //! - //! Note: If an element is inserted it might invalidate elements. - iterator insert(insert_const_ref_type x) - { return priv_insert(x); } + //! Note: If capacity() is less than "count", iterators and references to + //! to values might be invalidated. + void reserve(size_type count_) + { m_flat_tree.reserve(count_); } - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(T &x) - { return this->insert(const_cast(x)); } + //! Effects: Tries to deallocate the excess of memory created + // with previous allocations. The size of the vector is unchanged + //! + //! Throws: If memory allocation throws, or Key's copy constructor throws. + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { m_flat_tree.shrink_to_fit(); } - template - iterator insert(const U &u, typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(u); } - #endif - - //! Effects: Inserts a new value_type move constructed from x - //! and returns the iterator pointing to the newly inserted element. - //! - //! Complexity: Logarithmic search time plus linear insertion - //! to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - iterator insert(BOOST_RV_REF(value_type) x) - { return m_flat_tree.insert_equal(boost::move(x)); } - - //! Effects: Inserts a copy of x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic search time (constant if x is inserted - //! right before p) plus insertion linear to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - iterator insert(const_iterator p, insert_const_ref_type x) - { return priv_insert(p, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) - { return this->insert(position, const_cast(x)); } - - template - iterator insert( const_iterator position, const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(position, u); } - #endif - - //! Effects: Inserts a new value move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic search time (constant if x is inserted - //! right before p) plus insertion linear to the elements with bigger keys than x. - //! - //! Note: If an element is inserted it might invalidate elements. - iterator insert(const_iterator position, BOOST_RV_REF(value_type) x) - { return m_flat_tree.insert_equal(position, boost::move(x)); } - - //! Requires: first, last are not iterators into *this. - //! - //! Effects: inserts each element from the range [first,last) . - //! - //! Complexity: At most N log(size()+N) (N is the distance from first to last) - //! search time plus N*size() insertion time. - //! - //! Note: If an element is inserted it might invalidate elements. - template - void insert(InputIterator first, InputIterator last) - { m_flat_tree.insert_equal(first, last); } - - //! Requires: first, last are not iterators into *this and - //! must be ordered according to the predicate. - //! - //! Effects: inserts each element from the range [first,last) .This function - //! is more efficient than the normal range creation for ordered ranges. - //! - //! Complexity: At most N log(size()+N) (N is the distance from first to last) - //! search time plus N*size() insertion time. - //! - //! Note: Non-standard extension. If an element is inserted it might invalidate elements. - template - void insert(ordered_range_t, InputIterator first, InputIterator last) - { m_flat_tree.insert_equal(ordered_range, first, last); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts an object of type T constructed with + //! Effects: Inserts an object of type Key constructed with //! std::forward(args)... and returns the iterator pointing to the //! newly inserted element. //! @@ -1105,7 +1089,7 @@ class flat_multiset iterator emplace(Args&&... args) { return m_flat_tree.emplace_equal(boost::forward(args)...); } - //! Effects: Inserts an object of type T constructed with + //! Effects: Inserts an object of type Key constructed with //! std::forward(args)... in the container. //! p is a hint pointing to where the insert should start to search. //! @@ -1138,6 +1122,82 @@ class flat_multiset #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts x and returns the iterator pointing to the + //! newly inserted element. + //! + //! Complexity: Logarithmic search time plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const value_type &x); + + //! Effects: Inserts a new value_type move constructed from x + //! and returns the iterator pointing to the newly inserted element. + //! + //! Complexity: Logarithmic search time plus linear insertion + //! to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(value_type &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(insert, value_type, iterator, this->priv_insert) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic search time (constant if x is inserted + //! right before p) plus insertion linear to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator p, const value_type &x); + + //! Effects: Inserts a new value move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic search time (constant if x is inserted + //! right before p) plus insertion linear to the elements with bigger keys than x. + //! + //! Note: If an element is inserted it might invalidate elements. + iterator insert(const_iterator position, value_type &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator) + #endif + + //! Requires: first, last are not iterators into *this. + //! + //! Effects: inserts each element from the range [first,last) . + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: If an element is inserted it might invalidate elements. + template + void insert(InputIterator first, InputIterator last) + { m_flat_tree.insert_equal(first, last); } + + //! Requires: first, last are not iterators into *this and + //! must be ordered according to the predicate. + //! + //! Effects: inserts each element from the range [first,last) .This function + //! is more efficient than the normal range creation for ordered ranges. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + //! search time plus N*size() insertion time. + //! + //! Note: Non-standard extension. If an element is inserted it might invalidate elements. + template + void insert(ordered_range_t, InputIterator first, InputIterator last) + { m_flat_tree.insert_equal(ordered_range, first, last); } + //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately @@ -1171,6 +1231,14 @@ class flat_multiset iterator erase(const_iterator first, const_iterator last) { return m_flat_tree.erase(first, last); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(flat_multiset& x) + { m_flat_tree.swap(x.m_flat_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -1179,14 +1247,31 @@ class flat_multiset void clear() { m_flat_tree.clear(); } - //! Effects: Tries to deallocate the excess of memory created - // with previous allocations. The size of the vector is unchanged + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Complexity: Constant. + key_compare key_comp() const + { return m_flat_tree.key_comp(); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. //! - //! Complexity: Linear to size(). - void shrink_to_fit() - { m_flat_tree.shrink_to_fit(); } + //! Complexity: Constant. + value_compare value_comp() const + { return m_flat_tree.key_comp(); } + + ////////////////////////////////////////////// + // + // set operations + // + ////////////////////////////////////////////// //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. @@ -1195,7 +1280,7 @@ class flat_multiset iterator find(const key_type& x) { return m_flat_tree.find(x); } - //! Returns: A const_iterator pointing to an element with the key + //! Returns: Allocator const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic.s @@ -1215,7 +1300,7 @@ class flat_multiset iterator lower_bound(const key_type& x) { return m_flat_tree.lower_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1229,7 +1314,7 @@ class flat_multiset iterator upper_bound(const key_type& x) { return m_flat_tree.upper_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1239,38 +1324,15 @@ class flat_multiset //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair equal_range(const key_type& x) const { return m_flat_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair equal_range(const key_type& x) { return m_flat_tree.equal_range(x); } - //! Effects: Number of elements for which memory has been allocated. - //! capacity() is always greater than or equal to size(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type capacity() const - { return m_flat_tree.capacity(); } - - //! Effects: If n is less than or equal to capacity(), this call has no - //! effect. Otherwise, it is a request for allocation of additional memory. - //! If the request is successful, then capacity() is greater than or equal to - //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. - //! - //! Throws: If memory allocation allocation throws or T's copy constructor throws. - //! - //! Note: If capacity() is less than "count", iterators and references to - //! to values might be invalidated. - void reserve(size_type count) - { m_flat_tree.reserve(count); } - /// @cond template friend bool operator== (const flat_multiset&, @@ -1279,46 +1341,48 @@ class flat_multiset friend bool operator< (const flat_multiset&, const flat_multiset&); private: - iterator priv_insert(const T &x) - { return m_flat_tree.insert_equal(x); } + template + iterator priv_insert(BOOST_FWD_REF(KeyType) x) + { return m_flat_tree.insert_equal(::boost::forward(x)); } - iterator priv_insert(const_iterator p, const T &x) - { return m_flat_tree.insert_equal(p, x); } + template + iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x) + { return m_flat_tree.insert_equal(p, ::boost::forward(x)); } /// @endcond }; -template -inline bool operator==(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator==(const flat_multiset& x, + const flat_multiset& y) { return x.m_flat_tree == y.m_flat_tree; } -template -inline bool operator<(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator<(const flat_multiset& x, + const flat_multiset& y) { return x.m_flat_tree < y.m_flat_tree; } -template -inline bool operator!=(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator!=(const flat_multiset& x, + const flat_multiset& y) { return !(x == y); } -template -inline bool operator>(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator>(const flat_multiset& x, + const flat_multiset& y) { return y < x; } -template -inline bool operator<=(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator<=(const flat_multiset& x, + const flat_multiset& y) { return !(y < x); } -template -inline bool operator>=(const flat_multiset& x, - const flat_multiset& y) +template +inline bool operator>=(const flat_multiset& x, + const flat_multiset& y) { return !(x < y); } -template -inline void swap(flat_multiset& x, flat_multiset& y) +template +inline void swap(flat_multiset& x, flat_multiset& y) { x.swap(y); } /// @cond @@ -1327,10 +1391,10 @@ inline void swap(flat_multiset& x, flat_multiset& y) /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ namespace container { diff --git a/3party/boost/boost/container/list.hpp b/3party/boost/boost/container/list.hpp index c3e3562988..38f7c54c9b 100644 --- a/3party/boost/boost/container/list.hpp +++ b/3party/boost/boost/container/list.hpp @@ -7,8 +7,8 @@ // See http://www.boost.org/libs/container for documentation. // -#ifndef BOOST_CONTAINER_LIST_HPP_ -#define BOOST_CONTAINER_LIST_HPP_ +#ifndef BOOST_CONTAINER_LIST_HPP +#define BOOST_CONTAINER_LIST_HPP #if (defined _MSC_VER) && (_MSC_VER >= 1200) # pragma once @@ -43,13 +43,8 @@ #include #include -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { namespace container { -#else -namespace boost { -namespace container { -#endif /// @cond namespace container_detail { @@ -73,10 +68,10 @@ struct list_node T m_data; }; -template +template struct intrusive_list_type { - typedef boost::container::allocator_traits allocator_traits_type; + typedef boost::container::allocator_traits allocator_traits_type; typedef typename allocator_traits_type::value_type value_type; typedef typename boost::intrusive::pointer_traits ::template @@ -94,6 +89,111 @@ struct intrusive_list_type typedef container_type type ; }; +template +class list_const_iterator + : public std::iterator< std::bidirectional_iterator_tag, T + , typename iiterator_types::difference_type + , typename iiterator_types::const_pointer + , typename iiterator_types::const_reference> +{ + protected: + + IIterator m_it; + + public: + typedef typename iiterator_types::const_pointer const_pointer; + typedef typename iiterator_types::const_reference const_reference; + + //Constructors + list_const_iterator() + : m_it() + {} + + explicit list_const_iterator(const IIterator &it) + : m_it(it) + {} + + //Pointer like operators + const_reference operator*() const + { return this->m_it->m_data; } + + const_pointer operator->() const + { return ::boost::intrusive::pointer_traits::to_pointer(this->m_it->m_data); } + + //Increment / Decrement + list_const_iterator& operator++() + { ++this->m_it; return *this; } + + list_const_iterator operator++(int) + { IIterator tmp = this->m_it; ++*this; return list_const_iterator(tmp); } + + list_const_iterator& operator--() + { --this->m_it; return *this; } + + list_const_iterator operator--(int) + { IIterator tmp = this->m_it; --*this; return list_const_iterator(tmp); } + + //Comparison operators + friend bool operator== (const list_const_iterator& l, const list_const_iterator& r) + { return l.m_it == r.m_it; } + + friend bool operator!= (const list_const_iterator& l, const list_const_iterator& r) + { return l.m_it != r.m_it; } + + IIterator &get() + { return this->m_it; } + + const IIterator &get() const + { return this->m_it; } +}; + +template +class list_iterator + : public list_const_iterator +{ + private: + typedef list_const_iterator const_iterator; + + public: + typedef typename iiterator_types::pointer pointer; + typedef typename iiterator_types::reference reference; + + //Constructors + list_iterator() + : const_iterator() + {} + + explicit list_iterator(const IIterator &it) + : const_iterator(it) + {} + + //Pointer like operators + reference operator*() const + { return this->m_it->m_data; } + + pointer operator->() const + { return ::boost::intrusive::pointer_traits::pointer_to(this->m_it->m_data); } + + //Increment / Decrement + list_iterator& operator++() + { ++this->m_it; return *this; } + + list_iterator operator++(int) + { IIterator tmp = this->m_it; ++*this; return list_iterator(tmp); } + + list_iterator& operator--() + { --this->m_it; return *this; } + + list_iterator operator--(int) + { IIterator tmp = this->m_it; --*this; return list_iterator(tmp); } + + IIterator &get() + { return this->m_it; } + + const IIterator &get() const + { return this->m_it; } +}; + } //namespace container_detail { /// @endcond @@ -108,28 +208,27 @@ struct intrusive_list_type //! not be invalidated or made to point to different elements unless that invalidation //! or mutation is explicit. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template > +template > #else -template +template #endif class list : protected container_detail::node_alloc_holder - ::type> + ::type> { /// @cond typedef typename - container_detail::intrusive_list_type::type Icont; - typedef list ThisType; - typedef container_detail::node_alloc_holder AllocHolder; - typedef typename AllocHolder::NodePtr NodePtr; - typedef typename AllocHolder::NodeAlloc NodeAlloc; - typedef typename AllocHolder::ValAlloc ValAlloc; - typedef typename AllocHolder::Node Node; - typedef container_detail::allocator_destroyer Destroyer; - typedef typename AllocHolder::allocator_v1 allocator_v1; - typedef typename AllocHolder::allocator_v2 allocator_v2; - typedef typename AllocHolder::alloc_version alloc_version; - typedef boost::container::allocator_traits allocator_traits_type; + container_detail::intrusive_list_type::type Icont; + typedef container_detail::node_alloc_holder AllocHolder; + typedef typename AllocHolder::NodePtr NodePtr; + typedef typename AllocHolder::NodeAlloc NodeAlloc; + typedef typename AllocHolder::ValAlloc ValAlloc; + typedef typename AllocHolder::Node Node; + typedef container_detail::allocator_destroyer Destroyer; + typedef typename AllocHolder::allocator_v1 allocator_v1; + typedef typename AllocHolder::allocator_v2 allocator_v2; + typedef typename AllocHolder::alloc_version alloc_version; + typedef boost::container::allocator_traits allocator_traits_type; class equal_to_value { @@ -159,141 +258,39 @@ class list bool operator()(const Node &a) const { return static_cast(*this)(a.m_data); } }; - /// @endcond - public: - //! The type of object, T, stored in the list - typedef T value_type; - //! Pointer to T - typedef typename allocator_traits_type::pointer pointer; - //! Const pointer to T - typedef typename allocator_traits_type::const_pointer const_pointer; - //! Reference to T - typedef typename allocator_traits_type::reference reference; - //! Const reference to T - typedef typename allocator_traits_type::const_reference const_reference; - //! An unsigned integral type - typedef typename allocator_traits_type::size_type size_type; - //! A signed integral type - typedef typename allocator_traits_type::difference_type difference_type; - //! The allocator type - typedef A allocator_type; - //! Non-standard extension: the stored allocator type - typedef NodeAlloc stored_allocator_type; - - /// @cond - private: BOOST_COPYABLE_AND_MOVABLE(list) - typedef difference_type list_difference_type; - typedef pointer list_pointer; - typedef const_pointer list_const_pointer; - typedef reference list_reference; - typedef const_reference list_const_reference; + + typedef container_detail::list_iterator iterator_impl; + typedef container_detail::list_const_iteratorconst_iterator_impl; /// @endcond public: - //! Const iterator used to iterate through a list. - class const_iterator - /// @cond - : public std::iterator - { + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// - protected: - typename Icont::iterator m_it; - explicit const_iterator(typename Icont::iterator it) : m_it(it){} - void prot_incr() { ++m_it; } - void prot_decr() { --m_it; } + typedef T value_type; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef BOOST_CONTAINER_IMPDEF(NodeAlloc) stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator; + typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) const_reverse_iterator; - private: - typename Icont::iterator get() - { return this->m_it; } - - public: - friend class list; - typedef list_difference_type difference_type; - - //Constructors - const_iterator() - : m_it() - {} - - //Pointer like operators - const_reference operator*() const - { return m_it->m_data; } - - const_pointer operator->() const - { return const_pointer(&m_it->m_data); } - - //Increment / Decrement - const_iterator& operator++() - { prot_incr(); return *this; } - - const_iterator operator++(int) - { typename Icont::iterator tmp = m_it; ++*this; return const_iterator(tmp); } - - const_iterator& operator--() - { prot_decr(); return *this; } - - const_iterator operator--(int) - { typename Icont::iterator tmp = m_it; --*this; return const_iterator(tmp); } - - //Comparison operators - bool operator== (const const_iterator& r) const - { return m_it == r.m_it; } - - bool operator!= (const const_iterator& r) const - { return m_it != r.m_it; } - } - /// @endcond - ; - - //! Iterator used to iterate through a list - class iterator - /// @cond - : public const_iterator - { - - private: - explicit iterator(typename Icont::iterator it) - : const_iterator(it) - {} - - typename Icont::iterator get() - { return this->m_it; } - - public: - friend class list; - typedef list_pointer pointer; - typedef list_reference reference; - - //Constructors - iterator(){} - - //Pointer like operators - reference operator*() const { return this->m_it->m_data; } - pointer operator->() const { return pointer(&this->m_it->m_data); } - - //Increment / Decrement - iterator& operator++() - { this->prot_incr(); return *this; } - - iterator operator++(int) - { typename Icont::iterator tmp = this->m_it; ++*this; return iterator(tmp); } - - iterator& operator--() - { this->prot_decr(); return *this; } - - iterator operator--(int) - { iterator tmp = *this; --*this; return tmp; } - }; - /// @endcond - - //! Iterator used to iterate backwards through a list. - typedef std::reverse_iterator reverse_iterator; - //! Const iterator used to iterate backwards through a list. - typedef std::reverse_iterator const_reverse_iterator; + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructs a list. //! @@ -321,7 +318,7 @@ class list //! //! Complexity: Linear to n. explicit list(size_type n) - : AllocHolder(A()) + : AllocHolder(Allocator()) { this->resize(n); } //! Effects: Constructs a list that will use a copy of allocator a @@ -331,7 +328,7 @@ class list //! throws or T's default or copy constructor throws. //! //! Complexity: Linear to n. - list(size_type n, const T& value, const A& a = A()) + list(size_type n, const T& value, const Allocator& a = Allocator()) : AllocHolder(a) { this->insert(this->cbegin(), n, value); } @@ -391,7 +388,7 @@ class list //! //! Complexity: Linear to the range [first, last). template - list(InpIt first, InpIt last, const A &a = A()) + list(InpIt first, InpIt last, const Allocator &a = Allocator()) : AllocHolder(a) { this->insert(this->cbegin(), first, last); } @@ -404,6 +401,98 @@ class list ~list() {} //AllocHolder clears the list + //! Effects: Makes *this contain the same elements as x. + //! + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to the number of elements in x. + list& operator=(BOOST_COPY_ASSIGN_REF(list) x) + { + if (&x != this){ + NodeAlloc &this_alloc = this->node_alloc(); + const NodeAlloc &x_alloc = x.node_alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + } + this->AllocHolder::copy_assign_alloc(x); + this->assign(x.begin(), x.end()); + } + return *this; + } + + //! Effects: Move assignment. All mx's values are transferred to *this. + //! + //! Postcondition: x.empty(). *this contains a the elements x had + //! before the function. + //! + //! Throws: If allocator_type's copy constructor throws. + //! + //! Complexity: Constant. + list& operator=(BOOST_RV_REF(list) x) + { + if (&x != this){ + NodeAlloc &this_alloc = this->node_alloc(); + NodeAlloc &x_alloc = x.node_alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy and swap pointers + this->clear(); + this->icont() = boost::move(x.icont()); + //Move allocator if needed + this->AllocHolder::move_assign_alloc(x); + } + //If unequal allocators, then do a one by one move + else{ + typedef typename std::iterator_traits::iterator_category ItCat; + this->assign( boost::make_move_iterator(x.begin()) + , boost::make_move_iterator(x.end())); + } + } + return *this; + } + + //! Effects: Assigns the n copies of val to *this. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + void assign(size_type n, const T& val) + { + typedef constant_iterator cvalue_iterator; + return this->assign(cvalue_iterator(val, n), cvalue_iterator()); + } + + //! Effects: Assigns the the range [first, last) to *this. + //! + //! Throws: If memory allocation throws or + //! T's constructor from dereferencing InpIt throws. + //! + //! Complexity: Linear to n. + template + void assign(InpIt first, InpIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + >::type * = 0 + #endif + ) + { + iterator first1 = this->begin(); + const iterator last1 = this->end(); + for ( ; first1 != last1 && first != last; ++first1, ++first) + *first1 = *first; + if (first == last) + this->erase(first1, last1); + else{ + this->insert(last1, first, last); + } + } + //! Effects: Returns a copy of the internal allocator. //! //! Throws: If allocator's copy constructor throws. @@ -412,19 +501,31 @@ class list allocator_type get_allocator() const { return allocator_type(this->node_alloc()); } - const stored_allocator_type &get_stored_allocator() const - { return this->node_alloc(); } - + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. stored_allocator_type &get_stored_allocator() { return this->node_alloc(); } - //! Effects: Erases all the elements of the list. + //! Effects: Returns a reference to the internal allocator. //! - //! Throws: Nothing. + //! Throws: Nothing //! - //! Complexity: Linear to the number of elements in the list. - void clear() - { AllocHolder::clear(alloc_version()); } + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const + { return this->node_alloc(); } + + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the list. //! @@ -528,6 +629,12 @@ class list const_reverse_iterator crend() const { return const_reverse_iterator(this->cbegin()); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the list contains no elements. //! //! Throws: Nothing. @@ -552,61 +659,38 @@ class list size_type max_size() const { return AllocHolder::max_size(); } - #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts a copy of x at the beginning of the list. + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are default constructed. //! - //! Throws: If memory allocation throws or - //! T's copy constructor throws. + //! Throws: If memory allocation throws, or T's copy constructor throws. //! - //! Complexity: Amortized constant time. - void push_front(const T &x); + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size) + { + if(!priv_try_shrink(new_size)){ + typedef default_construct_iterator default_iterator; + this->insert(this->cend(), default_iterator(new_size - this->size()), default_iterator()); + } + } - //! Effects: Constructs a new element in the beginning of the list - //! and moves the resources of mx to this new element. + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. //! - //! Throws: If memory allocation throws. + //! Throws: If memory allocation throws, or T's copy constructor throws. //! - //! Complexity: Amortized constant time. - void push_front(T &&x); - #else - BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front) - #endif + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size, const T& x) + { + if(!priv_try_shrink(new_size)){ + this->insert(this->cend(), new_size - this->size(), x); + } + } - #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts a copy of x at the end of the list. - //! - //! Throws: If memory allocation throws or - //! T's copy constructor throws. - //! - //! Complexity: Amortized constant time. - void push_back(const T &x); - - //! Effects: Constructs a new element in the end of the list - //! and moves the resources of mx to this new element. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Amortized constant time. - void push_back(T &&x); - #else - BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) - #endif - - //! Effects: Removes the first element from the list. - //! - //! Throws: Nothing. - //! - //! Complexity: Amortized constant time. - void pop_front() - { this->erase(this->cbegin()); } - - //! Effects: Removes the last element from the list. - //! - //! Throws: Nothing. - //! - //! Complexity: Amortized constant time. - void pop_back() - { const_iterator tmp = this->cend(); this->erase(--tmp); } + ////////////////////////////////////////////// + // + // element access + // + ////////////////////////////////////////////// //! Requires: !empty() //! @@ -652,173 +736,11 @@ class list const_reference back() const { return *(--this->end()); } - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are copy constructed from x. - //! - //! Throws: If memory allocation throws, or T's copy constructor throws. - //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size, const T& x) - { - const_iterator iend = this->cend(); - size_type len = this->size(); - - if(len > new_size){ - size_type to_erase = len - new_size; - while(to_erase--){ - --iend; - } - this->erase(iend, this->cend()); - } - else{ - this->priv_create_and_insert_nodes(iend, new_size - len, x); - } - } - - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are default constructed. - //! - //! Throws: If memory allocation throws, or T's copy constructor throws. - //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size) - { - const_iterator iend = this->end(); - size_type len = this->size(); - - if(len > new_size){ - size_type to_erase = len - new_size; - const_iterator ifirst; - if(to_erase < len/2u){ - ifirst = iend; - while(to_erase--){ - --ifirst; - } - } - else{ - ifirst = this->begin(); - size_type to_skip = len - to_erase; - while(to_skip--){ - ++ifirst; - } - } - this->erase(ifirst, iend); - } - else{ - this->priv_create_and_insert_nodes(this->cend(), new_size - len); - } - } - - //! Effects: Swaps the contents of *this and x. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - void swap(ThisType& x) - { AllocHolder::swap(x); } - - //! Effects: Makes *this contain the same elements as x. - //! - //! Postcondition: this->size() == x.size(). *this contains a copy - //! of each of x's elements. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to the number of elements in x. - ThisType& operator=(BOOST_COPY_ASSIGN_REF(ThisType) x) - { - if (&x != this){ - NodeAlloc &this_alloc = this->node_alloc(); - const NodeAlloc &x_alloc = x.node_alloc(); - container_detail::bool_ flag; - if(flag && this_alloc != x_alloc){ - this->clear(); - } - this->AllocHolder::copy_assign_alloc(x); - this->assign(x.begin(), x.end()); - } - return *this; - } - - //! Effects: Move assignment. All mx's values are transferred to *this. - //! - //! Postcondition: x.empty(). *this contains a the elements x had - //! before the function. - //! - //! Throws: If allocator_type's copy constructor throws. - //! - //! Complexity: Constant. - ThisType& operator=(BOOST_RV_REF(ThisType) x) - { - if (&x != this){ - NodeAlloc &this_alloc = this->node_alloc(); - NodeAlloc &x_alloc = x.node_alloc(); - //If allocators are equal we can just swap pointers - if(this_alloc == x_alloc){ - //Destroy and swap pointers - this->clear(); - this->icont() = boost::move(x.icont()); - //Move allocator if needed - this->AllocHolder::move_assign_alloc(x); - } - //If unequal allocators, then do a one by one move - else{ - typedef typename std::iterator_traits::iterator_category ItCat; - this->assign( boost::make_move_iterator(x.begin()) - , boost::make_move_iterator(x.end())); - } - } - return *this; - } - - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Inserts n copies of x before p. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n. - void insert(const_iterator p, size_type n, const T& x) - { this->priv_create_and_insert_nodes(p, n, x); } - - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Insert a copy of the [first, last) range before p. - //! - //! Throws: If memory allocation throws, T's constructor from a - //! dereferenced InpIt throws. - //! - //! Complexity: Linear to std::distance [first, last). - template - void insert(const_iterator p, InpIt first, InpIt last) - { - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_insert_dispatch(p, first, last, Result()); - } - - #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Insert a copy of x before position. - //! - //! Throws: If memory allocation throws or x's copy constructor throws. - //! - //! Complexity: Amortized constant time. - iterator insert(const_iterator position, const T &x); - - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Insert a new element before position with mx's resources. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Amortized constant time. - iterator insert(const_iterator position, T &&x); - #else - BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) - #endif + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -831,9 +753,7 @@ class list //! Complexity: Constant template void emplace_back(Args&&... args) - { - this->emplace(this->cend(), boost::forward(args)...); - } + { this->emplace(this->cend(), boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... in the beginning of the list. @@ -844,9 +764,7 @@ class list //! Complexity: Constant template void emplace_front(Args&&... args) - { - this->emplace(this->cbegin(), boost::forward(args)...); - } + { this->emplace(this->cbegin(), boost::forward(args)...); } //! Effects: Inserts an object of type T constructed with //! std::forward(args)... before p. @@ -893,6 +811,155 @@ class list #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the beginning of the list. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_front(const T &x); + + //! Effects: Constructs a new element in the beginning of the list + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_front(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the end of the list. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_back(const T &x); + + //! Effects: Constructs a new element in the end of the list + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_back(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a copy of x before position. + //! + //! Returns: an iterator to the inserted element. + //! + //! Throws: If memory allocation throws or x's copy constructor throws. + //! + //! Complexity: Amortized constant time. + iterator insert(const_iterator position, const T &x); + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a new element before position with mx's resources. + //! + //! Returns: an iterator to the inserted element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + iterator insert(const_iterator position, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) + #endif + + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Inserts n copies of x before p. + //! + //! Returns: an iterator to the first inserted element or p if n is 0. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + iterator insert(const_iterator p, size_type n, const T& x) + { + typedef constant_iterator cvalue_iterator; + return this->insert(p, cvalue_iterator(x, n), cvalue_iterator()); + } + + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Insert a copy of the [first, last) range before p. + //! + //! Returns: an iterator to the first inserted element or p if first == last. + //! + //! Throws: If memory allocation throws, T's constructor from a + //! dereferenced InpIt throws. + //! + //! Complexity: Linear to std::distance [first, last). + template + iterator insert(const_iterator p, InpIt first, InpIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && (container_detail::is_input_iterator::value + || container_detail::is_same::value + ) + >::type * = 0 + #endif + ) + { + const typename Icont::iterator ipos(p.get()); + iterator ret_it(ipos); + if(first != last){ + ret_it = iterator(this->icont().insert(ipos, *this->create_node_from_it(first))); + ++first; + } + for (; first != last; ++first){ + this->icont().insert(ipos, *this->create_node_from_it(first)); + } + return ret_it; + } + + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + iterator insert(const_iterator p, FwdIt first, FwdIt last + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !(container_detail::is_input_iterator::value + || container_detail::is_same::value + ) + >::type * = 0 + ) + { + //Optimized allocation and construction + insertion_functor func(this->icont(), p.get()); + this->allocate_many_and_construct(first, std::distance(first, last), func); + return iterator(func.inserted_first()); + } + #endif + + //! Effects: Removes the first element from the list. + //! + //! Throws: Nothing. + //! + //! Complexity: Amortized constant time. + void pop_front() + { this->erase(this->cbegin()); } + + //! Effects: Removes the last element from the list. + //! + //! Throws: Nothing. + //! + //! Complexity: Amortized constant time. + void pop_back() + { const_iterator tmp = this->cend(); this->erase(--tmp); } + //! Requires: p must be a valid iterator of *this. //! //! Effects: Erases the element at p p. @@ -913,26 +980,46 @@ class list iterator erase(const_iterator first, const_iterator last) { return iterator(AllocHolder::erase_range(first.get(), last.get(), alloc_version())); } - //! Effects: Assigns the n copies of val to *this. + //! Effects: Swaps the contents of *this and x. //! - //! Throws: If memory allocation throws or T's copy constructor throws. + //! Throws: Nothing. //! - //! Complexity: Linear to n. - void assign(size_type n, const T& val) - { this->priv_fill_assign(n, val); } + //! Complexity: Constant. + void swap(list& x) + { AllocHolder::swap(x); } - //! Effects: Assigns the the range [first, last) to *this. + //! Effects: Erases all the elements of the list. //! - //! Throws: If memory allocation throws or - //! T's constructor from dereferencing InpIt throws. + //! Throws: Nothing. //! - //! Complexity: Linear to n. - template - void assign(InpIt first, InpIt last) + //! Complexity: Linear to the number of elements in the list. + void clear() + { AllocHolder::clear(alloc_version()); } + + ////////////////////////////////////////////// + // + // slist operations + // + ////////////////////////////////////////////// + + //! Requires: p must point to an element contained + //! by the list. x != *this + //! + //! Effects: Transfers all the elements of list x to this list, before the + //! the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Constant. + //! + //! Note: Iterators of values obtained from list x now point to elements of + //! this list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, list& x) BOOST_CONTAINER_NOEXCEPT { - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_assign_dispatch(first, last, Result()); + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice(p.get(), x.icont()); } //! Requires: p must point to an element contained @@ -948,10 +1035,28 @@ class list //! //! Note: Iterators of values obtained from list x now point to elements of //! this list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType& x) BOOST_CONTAINER_NOEXCEPT + void splice(const_iterator p, BOOST_RV_REF(list) x) BOOST_CONTAINER_NOEXCEPT + { this->splice(p, static_cast(x)); } + + //! Requires: p must point to an element contained + //! by this list. i must point to an element contained in list x. + //! + //! Effects: Transfers the value pointed by i, from list x to this list, + //! before the the element pointed by p. No destructors or copy constructors are called. + //! If p == i or p == ++i, this function is a null operation. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Constant. + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, list &x, const_iterator i) BOOST_CONTAINER_NOEXCEPT { - BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); - this->icont().splice(p.get(), x.icont()); + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice(p.get(), x.icont(), i.get()); } //! Requires: p must point to an element contained @@ -968,10 +1073,27 @@ class list //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType &x, const_iterator i) BOOST_CONTAINER_NOEXCEPT + void splice(const_iterator p, BOOST_RV_REF(list) x, const_iterator i) BOOST_CONTAINER_NOEXCEPT + { this->splice(p, static_cast(x), i); } + + //! Requires: p must point to an element contained + //! by this list. first and last must point to elements contained in list x. + //! + //! Effects: Transfers the range pointed by first and last from list x to this list, + //! before the the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear to the number of elements transferred. + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, list &x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT { - BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); - this->icont().splice(p.get(), x.icont(), i.get()); + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice(p.get(), x.icont(), first.get(), last.get()); } //! Requires: p must point to an element contained @@ -987,10 +1109,30 @@ class list //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType &x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT + void splice(const_iterator p, BOOST_RV_REF(list) x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT + { this->splice(p, static_cast(x), first, last); } + + //! Requires: p must point to an element contained + //! by this list. first and last must point to elements contained in list x. + //! n == std::distance(first, last) + //! + //! Effects: Transfers the range pointed by first and last from list x to this list, + //! before the the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Constant. + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + //! + //! Note: Non-standard extension + void splice(const_iterator p, list &x, const_iterator first, const_iterator last, size_type n) BOOST_CONTAINER_NOEXCEPT { - BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); - this->icont().splice(p.get(), x.icont(), first.get(), last.get()); + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice(p.get(), x.icont(), first.get(), last.get(), n); } //! Requires: p must point to an element contained @@ -1007,21 +1149,10 @@ class list //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType &x, const_iterator first, const_iterator last, size_type n) BOOST_CONTAINER_NOEXCEPT - { - BOOST_ASSERT((NodeAlloc&)*this == (NodeAlloc&)x); - this->icont().splice(p.get(), x.icont(), first.get(), last.get(), n); - } - - //! Effects: Reverses the order of elements in the list. //! - //! Throws: Nothing. - //! - //! Complexity: This function is linear time. - //! - //! Note: Iterators and references are not invalidated - void reverse() - { this->icont().reverse(); } + //! Note: Non-standard extension + void splice(const_iterator p, BOOST_RV_REF(list) x, const_iterator first, const_iterator last, size_type n) BOOST_CONTAINER_NOEXCEPT + { this->splice(p, static_cast(x), first, last, n); } //! Effects: Removes all the elements that compare equal to value. //! @@ -1032,7 +1163,7 @@ class list //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. void remove(const T& value) - { remove_if(equal_to_value(value)); } + { this->remove_if(equal_to_value(value)); } //! Effects: Removes all the elements for which a specified //! predicate is satisfied. @@ -1089,9 +1220,23 @@ class list //! //! Complexity: This function is linear time: it performs at most //! size() + x.size() - 1 comparisons. - void merge(list& x) + void merge(list &x) { this->merge(x, value_less()); } + //! Requires: The lists x and *this must be distinct. + //! + //! Effects: This function removes all of x's elements and inserts them + //! in order into *this according to std::less. The merge is stable; + //! that is, if an element from *this is equivalent to one from x, then the element + //! from *this will precede the one from x. + //! + //! Throws: Nothing. + //! + //! Complexity: This function is linear time: it performs at most + //! size() + x.size() - 1 comparisons. + void merge(BOOST_RV_REF(list) x) + { this->merge(static_cast(x)); } + //! Requires: p must be a comparison function that induces a strict weak //! ordering and both *this and x must be sorted according to that ordering //! The lists x and *this must be distinct. @@ -1118,6 +1263,24 @@ class list } } + //! Requires: p must be a comparison function that induces a strict weak + //! ordering and both *this and x must be sorted according to that ordering + //! The lists x and *this must be distinct. + //! + //! Effects: This function removes all of x's elements and inserts them + //! in order into *this. The merge is stable; that is, if an element from *this is + //! equivalent to one from x, then the element from *this will precede the one from x. + //! + //! Throws: Nothing. + //! + //! Complexity: This function is linear time: it performs at most + //! size() + x.size() - 1 comparisons. + //! + //! Note: Iterators and references to *this are not invalidated. + template + void merge(BOOST_RV_REF(list) x, StrictWeakOrdering comp) + { this->merge(static_cast(x), comp); } + //! Effects: This function sorts the list *this according to std::less. //! The sort is stable, that is, the relative order of equivalent elements is preserved. //! @@ -1148,9 +1311,47 @@ class list this->icont().sort(ValueCompareToNodeCompare(comp)); } + //! Effects: Reverses the order of elements in the list. + //! + //! Throws: Nothing. + //! + //! Complexity: This function is linear time. + //! + //! Note: Iterators and references are not invalidated + void reverse() + { this->icont().reverse(); } + /// @cond private: + bool priv_try_shrink(size_type new_size) + { + const size_type len = this->size(); + if(len > new_size){ + const const_iterator iend = this->cend(); + size_type to_erase = len - new_size; + const_iterator ifirst; + if(to_erase < len/2u){ + ifirst = iend; + while(to_erase--){ + --ifirst; + } + } + else{ + ifirst = this->cbegin(); + size_type to_skip = len - to_erase; + while(to_skip--){ + ++ifirst; + } + } + this->erase(ifirst, iend); + return true; + } + else{ + return false; + } + } + iterator priv_insert(const_iterator p, const T &x) { NodePtr tmp = AllocHolder::create_node(x); @@ -1175,117 +1376,39 @@ class list void priv_push_front (BOOST_RV_REF(T) x) { this->insert(this->cbegin(), boost::move(x)); } - //Iterator range version - template - void priv_create_and_insert_nodes - (const_iterator pos, InpIterator beg, InpIterator end) - { - typedef typename std::iterator_traits::iterator_category ItCat; - priv_create_and_insert_nodes(pos, beg, end, alloc_version(), ItCat()); - } - - template - void priv_create_and_insert_nodes - (const_iterator pos, InpIterator beg, InpIterator end, allocator_v1, std::input_iterator_tag) - { - for (; beg != end; ++beg){ - this->icont().insert(pos.get(), *this->create_node_from_it(beg)); - } - } - - template - void priv_create_and_insert_nodes - (const_iterator pos, InpIterator beg, InpIterator end, allocator_v2, std::input_iterator_tag) - { //Just forward to the default one - priv_create_and_insert_nodes(pos, beg, end, allocator_v1(), std::input_iterator_tag()); - } - class insertion_functor; friend class insertion_functor; class insertion_functor { Icont &icont_; - typename Icont::const_iterator pos_; + typedef typename Icont::iterator iiterator; + typedef typename Icont::const_iterator iconst_iterator; + + const iconst_iterator pos_; + iiterator ret_; + bool first_; public: insertion_functor(Icont &icont, typename Icont::const_iterator pos) - : icont_(icont), pos_(pos) + : icont_(icont), pos_(pos), ret_(pos.unconst()), first_(true) {} void operator()(Node &n) - { this->icont_.insert(pos_, n); } + { + if(first_){ + ret_ = this->icont_.insert(pos_, n); + first_ = false; + } + else{ + this->icont_.insert(pos_, n); + } + } + + iiterator inserted_first() const + { return ret_; } }; - - template - void priv_create_and_insert_nodes - (const_iterator pos, FwdIterator beg, FwdIterator end, allocator_v2, std::forward_iterator_tag) - { - if(beg != end){ - //Optimized allocation and construction - this->allocate_many_and_construct - (beg, std::distance(beg, end), insertion_functor(this->icont(), pos.get())); - } - } - - //Default constructed version - void priv_create_and_insert_nodes(const_iterator pos, size_type n) - { - typedef default_construct_iterator default_iterator; - this->priv_create_and_insert_nodes(pos, default_iterator(n), default_iterator()); - } - - //Copy constructed version - void priv_create_and_insert_nodes(const_iterator pos, size_type n, const T& x) - { - typedef constant_iterator cvalue_iterator; - this->priv_create_and_insert_nodes(pos, cvalue_iterator(x, n), cvalue_iterator()); - } - - //Dispatch to detect iterator range or integer overloads - template - void priv_insert_dispatch(const_iterator p, - InputIter first, InputIter last, - container_detail::false_) - { this->priv_create_and_insert_nodes(p, first, last); } - - template - void priv_insert_dispatch(const_iterator p, Integer n, Integer x, container_detail::true_) - { this->insert(p, (size_type)n, x); } - - void priv_fill_assign(size_type n, const T& val) - { - iterator i = this->begin(), iend = this->end(); - - for ( ; i != iend && n > 0; ++i, --n) - *i = val; - if (n > 0){ - this->priv_create_and_insert_nodes(this->cend(), n, val); - } - else{ - this->erase(i, cend()); - } - } - - template - void priv_assign_dispatch(Integer n, Integer val, container_detail::true_) - { this->priv_fill_assign((size_type) n, (T) val); } - - template - void priv_assign_dispatch(InputIter first2, InputIter last2, container_detail::false_) - { - iterator first1 = this->begin(); - iterator last1 = this->end(); - for ( ; first1 != last1 && first2 != last2; ++first1, ++first2) - *first1 = *first2; - if (first2 == last2) - this->erase(first1, last1); - else{ - this->priv_create_and_insert_nodes(last1, first2, last2); - } - } - //Functors for member algorithm defaults struct value_less { @@ -1302,13 +1425,13 @@ class list }; -template -inline bool operator==(const list& x, const list& y) +template +inline bool operator==(const list& x, const list& y) { if(x.size() != y.size()){ return false; } - typedef typename list::const_iterator const_iterator; + typedef typename list::const_iterator const_iterator; const_iterator end1 = x.end(); const_iterator i1 = x.begin(); @@ -1320,39 +1443,39 @@ inline bool operator==(const list& x, const list& y) return i1 == end1; } -template -inline bool operator<(const list& x, - const list& y) +template +inline bool operator<(const list& x, + const list& y) { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); } -template -inline bool operator!=(const list& x, const list& y) +template +inline bool operator!=(const list& x, const list& y) { return !(x == y); } -template -inline bool operator>(const list& x, const list& y) +template +inline bool operator>(const list& x, const list& y) { return y < x; } -template -inline bool operator<=(const list& x, const list& y) +template +inline bool operator<=(const list& x, const list& y) { return !(y < x); } -template -inline bool operator>=(const list& x, const list& y) +template +inline bool operator>=(const list& x, const list& y) { return !(x < y); } -template -inline void swap(list& x, list& y) +template +inline void swap(list& x, list& y) { x.swap(y); } @@ -1363,10 +1486,10 @@ inline void swap(list& x, list& y) /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value; }; */ namespace container { @@ -1377,4 +1500,4 @@ namespace container { #include -#endif // BOOST_CONTAINER_LIST_HPP_ +#endif // BOOST_CONTAINER_LIST_HPP diff --git a/3party/boost/boost/container/map.hpp b/3party/boost/boost/container/map.hpp index 91cbd35429..92d499afbf 100644 --- a/3party/boost/boost/container/map.hpp +++ b/3party/boost/boost/container/map.hpp @@ -35,24 +35,18 @@ #include #include - -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { namespace container { -#else -namespace boost { -namespace container { -#endif /// @cond // Forward declarations of operators == and <, needed for friend declarations. -template -inline bool operator==(const map& x, - const map& y); +template +inline bool operator==(const map& x, + const map& y); -template -inline bool operator<(const map& x, - const map& y); +template +inline bool operator<(const map& x, + const map& y); /// @endcond //! A map is a kind of associative container that supports unique keys (contains at @@ -63,67 +57,63 @@ inline bool operator<(const map& x, //! container and of an associative container. For a //! map the key_type is Key and the value_type is std::pair. //! -//! Pred is the ordering function for Keys (e.g. std::less). +//! Compare is the ordering function for Keys (e.g. std::less). //! -//! A is the allocator to allocate the value_types +//! Allocator is the allocator to allocate the value_types //! (e.g. allocator< std::pair > ). #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template >, class A = std::allocator > +template , class Allocator = std::allocator< std::pair< const Key, T> > > #else -template +template #endif class map { /// @cond private: BOOST_COPYABLE_AND_MOVABLE(map) - typedef container_detail::rbtree, - container_detail::select1st< std::pair >, - Pred, - A> tree_t; - tree_t m_tree; // red-black tree representing map + typedef std::pair value_type_impl; + typedef container_detail::rbtree + , Compare, Allocator> tree_t; + typedef container_detail::pair movable_value_type_impl; + typedef container_detail::tree_value_compare + < Key, value_type_impl, Compare, container_detail::select1st + > value_compare_impl; + tree_t m_tree; // red-black tree representing map /// @endcond public: + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// - // typedefs: - typedef typename tree_t::key_type key_type; - typedef typename tree_t::value_type value_type; - typedef typename tree_t::pointer pointer; - typedef typename tree_t::const_pointer const_pointer; - typedef typename tree_t::reference reference; - typedef typename tree_t::const_reference const_reference; - typedef T mapped_type; - typedef Pred key_compare; - typedef typename tree_t::iterator iterator; - typedef typename tree_t::const_iterator const_iterator; - typedef typename tree_t::reverse_iterator reverse_iterator; - typedef typename tree_t::const_reverse_iterator const_reverse_iterator; - typedef typename tree_t::size_type size_type; - typedef typename tree_t::difference_type difference_type; - typedef typename tree_t::allocator_type allocator_type; - typedef typename tree_t::stored_allocator_type stored_allocator_type; - typedef std::pair nonconst_value_type; - typedef container_detail::pair - nonconst_impl_value_type; + typedef Key key_type; + typedef T mapped_type; + typedef std::pair value_type; + typedef typename boost::container::allocator_traits::pointer pointer; + typedef typename boost::container::allocator_traits::const_pointer const_pointer; + typedef typename boost::container::allocator_traits::reference reference; + typedef typename boost::container::allocator_traits::const_reference const_reference; + typedef typename boost::container::allocator_traits::size_type size_type; + typedef typename boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare; + typedef Compare key_compare; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator; + typedef std::pair nonconst_value_type; + typedef BOOST_CONTAINER_IMPDEF(movable_value_type_impl) movable_value_type; - /// @cond - class value_compare_impl - : public Pred, - public std::binary_function - { - friend class map; - protected : - value_compare_impl(const Pred &c) : Pred(c) {} - public: - bool operator()(const value_type& x, const value_type& y) const { - return Pred::operator()(x.first, y.first); - } - }; - /// @endcond - typedef value_compare_impl value_compare; + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructs an empty map. //! @@ -132,19 +122,19 @@ class map : m_tree() { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Constructs an empty map using the specified comparison object //! and allocator. //! //! Complexity: Constant. - explicit map(const Pred& comp, + explicit map(const Compare& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Constructs an empty map using the specified comparison object and @@ -153,12 +143,12 @@ class map //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template - map(InputIterator first, InputIterator last, const Pred& comp = Pred(), + map(InputIterator first, InputIterator last, const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, true) + : m_tree(true, first, last, comp, a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Constructs an empty map using the specified comparison object and @@ -171,11 +161,11 @@ class map //! Complexity: Linear in N. template map( ordered_unique_range_t, InputIterator first, InputIterator last - , const Pred& comp = Pred(), const allocator_type& a = allocator_type()) + , const Compare& comp = Compare(), const allocator_type& a = allocator_type()) : m_tree(ordered_range, first, last, comp, a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Copy constructs a map. @@ -185,7 +175,7 @@ class map : m_tree(x.m_tree) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Move constructs a map. Constructs *this using x's resources. @@ -197,7 +187,7 @@ class map : m_tree(boost::move(x.m_tree)) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Copy constructs a map using the specified allocator. @@ -207,7 +197,7 @@ class map : m_tree(x.m_tree, a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Move constructs a map using the specified allocator. @@ -220,7 +210,7 @@ class map : m_tree(boost::move(x.m_tree), a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Makes *this a copy of x. @@ -235,20 +225,6 @@ class map map& operator=(BOOST_RV_REF(map) x) { m_tree = boost::move(x.m_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return m_tree.key_comp(); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return value_compare(m_tree.key_comp()); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -256,11 +232,31 @@ class map allocator_type get_allocator() const { return m_tree.get_allocator(); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() + { return m_tree.get_stored_allocator(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } - stored_allocator_type &get_stored_allocator() - { return m_tree.get_stored_allocator(); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the container. //! @@ -278,14 +274,6 @@ class map const_iterator begin() const { return this->cbegin(); } - //! Effects: Returns a const_iterator to the first element contained in the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cbegin() const - { return m_tree.begin(); } - //! Effects: Returns an iterator to the end of the container. //! //! Throws: Nothing. @@ -302,14 +290,6 @@ class map const_iterator end() const { return this->cend(); } - //! Effects: Returns a const_iterator to the end of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cend() const - { return m_tree.end(); } - //! Effects: Returns a reverse_iterator pointing to the beginning //! of the reversed container. //! @@ -328,15 +308,6 @@ class map const_reverse_iterator rbegin() const { return this->crbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return m_tree.rbegin(); } - //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed container. //! @@ -355,6 +326,31 @@ class map const_reverse_iterator rend() const { return this->crend(); } + //! Effects: Returns a const_iterator to the first element contained in the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const + { return m_tree.begin(); } + + //! Effects: Returns a const_iterator to the end of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const + { return m_tree.end(); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const + { return m_tree.rbegin(); } + //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed container. //! @@ -364,6 +360,12 @@ class map const_reverse_iterator crend() const { return m_tree.rend(); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -388,11 +390,17 @@ class map size_type max_size() const { return m_tree.max_size(); } + ////////////////////////////////////////////// + // + // element access + // + ////////////////////////////////////////////// + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: If there is no key equivalent to x in the map, inserts //! value_type(x, T()) into the map. //! - //! Returns: A reference to the mapped_type corresponding to x in *this. + //! Returns: Allocator reference to the mapped_type corresponding to x in *this. //! //! Complexity: Logarithmic. mapped_type& operator[](const key_type &k); @@ -400,15 +408,15 @@ class map //! Effects: If there is no key equivalent to x in the map, inserts //! value_type(boost::move(x), T()) into the map (the key is move-constructed) //! - //! Returns: A reference to the mapped_type corresponding to x in *this. + //! Returns: Allocator reference to the mapped_type corresponding to x in *this. //! //! Complexity: Logarithmic. mapped_type& operator[](key_type &&k); #else - BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, priv_subscript) + BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, this->priv_subscript) #endif - //! Returns: A reference to the element whose key is equivalent to x. + //! Returns: Allocator reference to the element whose key is equivalent to x. //! Throws: An exception object of type out_of_range if no such element is present. //! Complexity: logarithmic. T& at(const key_type& k) @@ -420,7 +428,7 @@ class map return i->second; } - //! Returns: A reference to the element whose key is equivalent to x. + //! Returns: Allocator reference to the element whose key is equivalent to x. //! Throws: An exception object of type out_of_range if no such element is present. //! Complexity: logarithmic. const T& at(const key_type& k) const @@ -432,13 +440,11 @@ class map return i->second; } - //! Effects: Swaps the contents of *this and x. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - void swap(map& x) - { m_tree.swap(x.m_tree); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// //! Effects: Inserts x if and only if there is no element in the container //! with key equivalent to the key of x. @@ -481,7 +487,7 @@ class map //! points to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - std::pair insert(BOOST_RV_REF(nonconst_impl_value_type) x) + std::pair insert(BOOST_RV_REF(movable_value_type) x) { return m_tree.insert_unique(boost::move(x)); } //! Effects: Move constructs a new value from x if and only if there is @@ -504,7 +510,7 @@ class map //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(iterator position, const value_type& x) + iterator insert(const_iterator position, const value_type& x) { return m_tree.insert_unique(position, x); } //! Effects: Move constructs a new value from x if and only if there is @@ -516,7 +522,7 @@ class map //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(iterator position, BOOST_RV_REF(nonconst_value_type) x) + iterator insert(const_iterator position, BOOST_RV_REF(nonconst_value_type) x) { return m_tree.insert_unique(position, boost::move(x)); } //! Effects: Move constructs a new value from x if and only if there is @@ -528,7 +534,7 @@ class map //! //! Complexity: Logarithmic in general, but amortized constant if t //! is inserted right before p. - iterator insert(iterator position, BOOST_RV_REF(nonconst_impl_value_type) x) + iterator insert(const_iterator position, BOOST_RV_REF(movable_value_type) x) { return m_tree.insert_unique(position, boost::move(x)); } //! Effects: Inserts a copy of x in the container. @@ -537,7 +543,7 @@ class map //! Returns: An iterator pointing to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - iterator insert(iterator position, const nonconst_value_type& x) + iterator insert(const_iterator position, const nonconst_value_type& x) { return m_tree.insert_unique(position, x); } //! Effects: Inserts an element move constructed from x in the container. @@ -546,7 +552,7 @@ class map //! Returns: An iterator pointing to the element with key equivalent to the key of x. //! //! Complexity: Logarithmic. - iterator insert(iterator position, BOOST_RV_REF(value_type) x) + iterator insert(const_iterator position, BOOST_RV_REF(value_type) x) { return m_tree.insert_unique(position, boost::move(x)); } //! Requires: first, last are not iterators into *this. @@ -634,6 +640,14 @@ class map iterator erase(const_iterator first, const_iterator last) { return m_tree.erase(first, last); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(map& x) + { m_tree.swap(x.m_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -642,6 +656,32 @@ class map void clear() { m_tree.clear(); } + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. + //! + //! Complexity: Constant. + key_compare key_comp() const + { return m_tree.key_comp(); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. + //! + //! Complexity: Constant. + value_compare value_comp() const + { return value_compare(m_tree.key_comp()); } + + ////////////////////////////////////////////// + // + // map operations + // + ////////////////////////////////////////////// + //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! @@ -649,7 +689,7 @@ class map iterator find(const key_type& x) { return m_tree.find(x); } - //! Returns: A const_iterator pointing to an element with the key + //! Returns: Allocator const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. @@ -669,7 +709,7 @@ class map iterator lower_bound(const key_type& x) { return m_tree.lower_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -683,7 +723,7 @@ class map iterator upper_bound(const key_type& x) { return m_tree.upper_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -717,7 +757,7 @@ class map // i->first is greater than or equivalent to k. if (i == end() || key_comp()(k, (*i).first)){ container_detail::value_init m; - nonconst_impl_value_type val(k, boost::move(m.m_t)); + movable_value_type val(k, boost::move(m.m_t)); i = insert(i, boost::move(val)); } return (*i).second; @@ -731,7 +771,7 @@ class map // i->first is greater than or equivalent to k. if (i == end() || key_comp()(k, (*i).first)){ container_detail::value_init m; - nonconst_impl_value_type val(boost::move(k), boost::move(m.m_t)); + movable_value_type val(boost::move(k), boost::move(m.m_t)); i = insert(i, boost::move(val)); } return (*i).second; @@ -740,60 +780,60 @@ class map /// @endcond }; -template -inline bool operator==(const map& x, - const map& y) +template +inline bool operator==(const map& x, + const map& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const map& x, - const map& y) +template +inline bool operator<(const map& x, + const map& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const map& x, - const map& y) +template +inline bool operator!=(const map& x, + const map& y) { return !(x == y); } -template -inline bool operator>(const map& x, - const map& y) +template +inline bool operator>(const map& x, + const map& y) { return y < x; } -template -inline bool operator<=(const map& x, - const map& y) +template +inline bool operator<=(const map& x, + const map& y) { return !(y < x); } -template -inline bool operator>=(const map& x, - const map& y) +template +inline bool operator>=(const map& x, + const map& y) { return !(x < y); } -template -inline void swap(map& x, map& y) +template +inline void swap(map& x, map& y) { x.swap(y); } /// @cond // Forward declaration of operators < and ==, needed for friend declaration. -template -inline bool operator==(const multimap& x, - const multimap& y); +template +inline bool operator==(const multimap& x, + const multimap& y); -template -inline bool operator<(const multimap& x, - const multimap& y); +template +inline bool operator<(const multimap& x, + const multimap& y); } //namespace container { /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ namespace container { @@ -809,68 +849,63 @@ namespace container { //! container and of an associative container. For a //! map the key_type is Key and the value_type is std::pair. //! -//! Pred is the ordering function for Keys (e.g. std::less). +//! Compare is the ordering function for Keys (e.g. std::less). //! -//! A is the allocator to allocate the value_types +//! Allocator is the allocator to allocate the value_types //!(e.g. allocator< std::pair<const Key, T> >). #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template >, class A = std::allocator > +template , class Allocator = std::allocator< std::pair< const Key, T> > > #else -template +template #endif class multimap { /// @cond private: BOOST_COPYABLE_AND_MOVABLE(multimap) - typedef container_detail::rbtree, - container_detail::select1st< std::pair >, - Pred, - A> tree_t; + + typedef std::pair value_type_impl; + typedef container_detail::rbtree + , Compare, Allocator> tree_t; + typedef container_detail::pair movable_value_type_impl; + typedef container_detail::tree_value_compare + < Key, value_type_impl, Compare, container_detail::select1st + > value_compare_impl; tree_t m_tree; // red-black tree representing map - typedef typename container_detail:: - move_const_ref_type::type insert_key_const_ref_type; /// @endcond public: + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// - // typedefs: - typedef typename tree_t::key_type key_type; - typedef typename tree_t::value_type value_type; - typedef typename tree_t::pointer pointer; - typedef typename tree_t::const_pointer const_pointer; - typedef typename tree_t::reference reference; - typedef typename tree_t::const_reference const_reference; - typedef T mapped_type; - typedef Pred key_compare; - typedef typename tree_t::iterator iterator; - typedef typename tree_t::const_iterator const_iterator; - typedef typename tree_t::reverse_iterator reverse_iterator; - typedef typename tree_t::const_reverse_iterator const_reverse_iterator; - typedef typename tree_t::size_type size_type; - typedef typename tree_t::difference_type difference_type; - typedef typename tree_t::allocator_type allocator_type; - typedef typename tree_t::stored_allocator_type stored_allocator_type; - typedef std::pair nonconst_value_type; - typedef container_detail::pair - nonconst_impl_value_type; + typedef Key key_type; + typedef T mapped_type; + typedef std::pair value_type; + typedef typename boost::container::allocator_traits::pointer pointer; + typedef typename boost::container::allocator_traits::const_pointer const_pointer; + typedef typename boost::container::allocator_traits::reference reference; + typedef typename boost::container::allocator_traits::const_reference const_reference; + typedef typename boost::container::allocator_traits::size_type size_type; + typedef typename boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare; + typedef Compare key_compare; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator; + typedef std::pair nonconst_value_type; + typedef BOOST_CONTAINER_IMPDEF(movable_value_type_impl) movable_value_type; - /// @cond - class value_compare_impl - : public Pred, - public std::binary_function - { - friend class multimap; - protected : - value_compare_impl(const Pred &c) : Pred(c) {} - public: - bool operator()(const value_type& x, const value_type& y) const { - return Pred::operator()(x.first, y.first); - } - }; - /// @endcond - typedef value_compare_impl value_compare; + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructs an empty multimap. //! @@ -879,18 +914,18 @@ class multimap : m_tree() { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Constructs an empty multimap using the specified comparison //! object and allocator. //! //! Complexity: Constant. - explicit multimap(const Pred& comp, const allocator_type& a = allocator_type()) + explicit multimap(const Compare& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Constructs an empty multimap using the specified comparison object @@ -900,12 +935,12 @@ class multimap //! comp and otherwise N logN, where N is last - first. template multimap(InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, false) + : m_tree(false, first, last, comp, a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Constructs an empty multimap using the specified comparison object and @@ -916,9 +951,9 @@ class multimap //! //! Complexity: Linear in N. template - multimap(ordered_range_t ordered_range, InputIterator first, InputIterator last, const Pred& comp = Pred(), + multimap(ordered_range_t ordered_range_, InputIterator first, InputIterator last, const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_tree(ordered_range, first, last, comp, a) + : m_tree(ordered_range_, first, last, comp, a) {} //! Effects: Copy constructs a multimap. @@ -928,7 +963,7 @@ class multimap : m_tree(x.m_tree) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Move constructs a multimap. Constructs *this using x's resources. @@ -940,7 +975,7 @@ class multimap : m_tree(boost::move(x.m_tree)) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Copy constructs a multimap. @@ -950,7 +985,7 @@ class multimap : m_tree(x.m_tree, a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Move constructs a multimap using the specified allocator. @@ -962,7 +997,7 @@ class multimap : m_tree(boost::move(x.m_tree), a) { //Allocator type must be std::pair - BOOST_STATIC_ASSERT((container_detail::is_same, typename A::value_type>::value)); + BOOST_STATIC_ASSERT((container_detail::is_same, typename Allocator::value_type>::value)); } //! Effects: Makes *this a copy of x. @@ -977,20 +1012,6 @@ class multimap multimap& operator=(BOOST_RV_REF(multimap) x) { m_tree = boost::move(x.m_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return m_tree.key_comp(); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return value_compare(m_tree.key_comp()); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -998,11 +1019,31 @@ class multimap allocator_type get_allocator() const { return m_tree.get_allocator(); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() + { return m_tree.get_stored_allocator(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } - stored_allocator_type &get_stored_allocator() - { return m_tree.get_stored_allocator(); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the container. //! @@ -1020,14 +1061,6 @@ class multimap const_iterator begin() const { return this->cbegin(); } - //! Effects: Returns a const_iterator to the first element contained in the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cbegin() const - { return m_tree.begin(); } - //! Effects: Returns an iterator to the end of the container. //! //! Throws: Nothing. @@ -1044,14 +1077,6 @@ class multimap const_iterator end() const { return this->cend(); } - //! Effects: Returns a const_iterator to the end of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_iterator cend() const - { return m_tree.end(); } - //! Effects: Returns a reverse_iterator pointing to the beginning //! of the reversed container. //! @@ -1070,15 +1095,6 @@ class multimap const_reverse_iterator rbegin() const { return this->crbegin(); } - //! Effects: Returns a const_reverse_iterator pointing to the beginning - //! of the reversed container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reverse_iterator crbegin() const - { return m_tree.rbegin(); } - //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed container. //! @@ -1097,6 +1113,31 @@ class multimap const_reverse_iterator rend() const { return this->crend(); } + //! Effects: Returns a const_iterator to the first element contained in the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cbegin() const + { return m_tree.begin(); } + + //! Effects: Returns a const_iterator to the end of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator cend() const + { return m_tree.end(); } + + //! Effects: Returns a const_reverse_iterator pointing to the beginning + //! of the reversed container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reverse_iterator crbegin() const + { return m_tree.rbegin(); } + //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed container. //! @@ -1106,6 +1147,12 @@ class multimap const_reverse_iterator crend() const { return m_tree.rend(); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -1130,94 +1177,11 @@ class multimap size_type max_size() const { return m_tree.max_size(); } - //! Effects: Swaps the contents of *this and x. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - void swap(multimap& x) - { m_tree.swap(x.m_tree); } - - //! Effects: Inserts x and returns the iterator pointing to the - //! newly inserted element. - //! - //! Complexity: Logarithmic. - iterator insert(const value_type& x) - { return m_tree.insert_equal(x); } - - //! Effects: Inserts a new value constructed from x and returns - //! the iterator pointing to the newly inserted element. - //! - //! Complexity: Logarithmic. - iterator insert(const nonconst_value_type& x) - { return m_tree.insert_equal(x); } - - //! Effects: Inserts a new value move-constructed from x and returns - //! the iterator pointing to the newly inserted element. - //! - //! Complexity: Logarithmic. - iterator insert(BOOST_RV_REF(nonconst_value_type) x) - { return m_tree.insert_equal(boost::move(x)); } - - //! Effects: Inserts a new value move-constructed from x and returns - //! the iterator pointing to the newly inserted element. - //! - //! Complexity: Logarithmic. - iterator insert(BOOST_RV_REF(nonconst_impl_value_type) x) - { return m_tree.insert_equal(boost::move(x)); } - - //! Effects: Inserts a copy of x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(iterator position, const value_type& x) - { return m_tree.insert_equal(position, x); } - - //! Effects: Inserts a new value constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(iterator position, const nonconst_value_type& x) - { return m_tree.insert_equal(position, x); } - - //! Effects: Inserts a new value move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(iterator position, BOOST_RV_REF(nonconst_value_type) x) - { return m_tree.insert_equal(position, boost::move(x)); } - - //! Effects: Inserts a new value move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(iterator position, BOOST_RV_REF(nonconst_impl_value_type) x) - { return m_tree.insert_equal(position, boost::move(x)); } - - //! Requires: first, last are not iterators into *this. - //! - //! Effects: inserts each element from the range [first,last) . - //! - //! Complexity: At most N log(size()+N) (N is the distance from first to last) - template - void insert(InputIterator first, InputIterator last) - { m_tree.insert_equal(first, last); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -1265,6 +1229,87 @@ class multimap #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + //! Effects: Inserts x and returns the iterator pointing to the + //! newly inserted element. + //! + //! Complexity: Logarithmic. + iterator insert(const value_type& x) + { return m_tree.insert_equal(x); } + + //! Effects: Inserts a new value constructed from x and returns + //! the iterator pointing to the newly inserted element. + //! + //! Complexity: Logarithmic. + iterator insert(const nonconst_value_type& x) + { return m_tree.insert_equal(x); } + + //! Effects: Inserts a new value move-constructed from x and returns + //! the iterator pointing to the newly inserted element. + //! + //! Complexity: Logarithmic. + iterator insert(BOOST_RV_REF(nonconst_value_type) x) + { return m_tree.insert_equal(boost::move(x)); } + + //! Effects: Inserts a new value move-constructed from x and returns + //! the iterator pointing to the newly inserted element. + //! + //! Complexity: Logarithmic. + iterator insert(BOOST_RV_REF(movable_value_type) x) + { return m_tree.insert_equal(boost::move(x)); } + + //! Effects: Inserts a copy of x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(const_iterator position, const value_type& x) + { return m_tree.insert_equal(position, x); } + + //! Effects: Inserts a new value constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(const_iterator position, const nonconst_value_type& x) + { return m_tree.insert_equal(position, x); } + + //! Effects: Inserts a new value move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(const_iterator position, BOOST_RV_REF(nonconst_value_type) x) + { return m_tree.insert_equal(position, boost::move(x)); } + + //! Effects: Inserts a new value move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(const_iterator position, BOOST_RV_REF(movable_value_type) x) + { return m_tree.insert_equal(position, boost::move(x)); } + + //! Requires: first, last are not iterators into *this. + //! + //! Effects: inserts each element from the range [first,last) . + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + template + void insert(InputIterator first, InputIterator last) + { m_tree.insert_equal(first, last); } + //! Effects: Erases the element pointed to by position. //! //! Returns: Returns an iterator pointing to the element immediately @@ -1291,6 +1336,14 @@ class multimap iterator erase(const_iterator first, const_iterator last) { return m_tree.erase(first, last); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(multimap& x) + { m_tree.swap(x.m_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -1299,6 +1352,32 @@ class multimap void clear() { m_tree.clear(); } + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. + //! + //! Complexity: Constant. + key_compare key_comp() const + { return m_tree.key_comp(); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. + //! + //! Complexity: Constant. + value_compare value_comp() const + { return value_compare(m_tree.key_comp()); } + + ////////////////////////////////////////////// + // + // map operations + // + ////////////////////////////////////////////// + //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! @@ -1306,7 +1385,7 @@ class multimap iterator find(const key_type& x) { return m_tree.find(x); } - //! Returns: A const iterator pointing to an element with the key + //! Returns: Allocator const iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. @@ -1326,7 +1405,7 @@ class multimap iterator lower_bound(const key_type& x) {return m_tree.lower_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1340,13 +1419,7 @@ class multimap iterator upper_bound(const key_type& x) { return m_tree.upper_bound(x); } - //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). - //! - //! Complexity: Logarithmic - std::pair equal_range(const key_type& x) - { return m_tree.equal_range(x); } - - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1356,8 +1429,13 @@ class multimap //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair equal_range(const key_type& x) + { return m_tree.equal_range(x); } + + //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). + //! + //! Complexity: Logarithmic + std::pair equal_range(const key_type& x) const { return m_tree.equal_range(x); } /// @cond @@ -1371,38 +1449,38 @@ class multimap /// @endcond }; -template -inline bool operator==(const multimap& x, - const multimap& y) +template +inline bool operator==(const multimap& x, + const multimap& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const multimap& x, - const multimap& y) +template +inline bool operator<(const multimap& x, + const multimap& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const multimap& x, - const multimap& y) +template +inline bool operator!=(const multimap& x, + const multimap& y) { return !(x == y); } -template -inline bool operator>(const multimap& x, - const multimap& y) +template +inline bool operator>(const multimap& x, + const multimap& y) { return y < x; } -template -inline bool operator<=(const multimap& x, - const multimap& y) +template +inline bool operator<=(const multimap& x, + const multimap& y) { return !(y < x); } -template -inline bool operator>=(const multimap& x, - const multimap& y) +template +inline bool operator>=(const multimap& x, + const multimap& y) { return !(x < y); } -template -inline void swap(multimap& x, multimap& y) +template +inline void swap(multimap& x, multimap& y) { x.swap(y); } /// @cond @@ -1411,10 +1489,10 @@ inline void swap(multimap& x, multimap& y) /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ namespace container { diff --git a/3party/boost/boost/container/scoped_allocator.hpp b/3party/boost/boost/container/scoped_allocator.hpp index 7da71bdf81..5111d37085 100644 --- a/3party/boost/boost/container/scoped_allocator.hpp +++ b/3party/boost/boost/container/scoped_allocator.hpp @@ -47,10 +47,10 @@ namespace boost { namespace container { //! ill-formed. //! //! [Example: -//! template > +//! template > //! class Z { //! public: -//! typedef A allocator_type; +//! typedef Allocator allocator_type; //! //! // Default constructor with optional allocator suffix //! Z(const allocator_type& a = allocator_type()); @@ -61,8 +61,8 @@ namespace boost { namespace container { //! }; //! //! // Specialize trait for class template Z -//! template > -//! struct constructible_with_allocator_suffix > +//! template > +//! struct constructible_with_allocator_suffix > //! : ::boost::true_type { }; //! -- end example] //! @@ -91,10 +91,10 @@ struct constructible_with_allocator_suffix //! a constructor, then the program is ill-formed. //! //! [Example: -//! template > +//! template > //! class Y { //! public: -//! typedef A allocator_type; +//! typedef Allocator allocator_type; //! //! // Default constructor with and allocator-extended default constructor //! Y(); @@ -111,8 +111,8 @@ struct constructible_with_allocator_suffix //! }; //! //! // Specialize trait for class template Y -//! template > -//! struct constructible_with_allocator_prefix > +//! template > +//! struct constructible_with_allocator_prefix > //! : ::boost::true_type { }; //! //! -- end example] @@ -1036,16 +1036,16 @@ class scoped_allocator_adaptor typedef typename outer_traits_type::const_pointer const_pointer; typedef typename outer_traits_type::void_pointer void_pointer; typedef typename outer_traits_type::const_void_pointer const_void_pointer; - //! Type: `true_type` if `allocator_traits::propagate_on_container_copy_assignment::value` is - //! true for any `A` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. + //! Type: `true_type` if `allocator_traits::propagate_on_container_copy_assignment::value` is + //! true for any `Allocator` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. typedef typename base_type:: propagate_on_container_copy_assignment propagate_on_container_copy_assignment; - //! Type: `true_type` if `allocator_traits::propagate_on_container_move_assignment::value` is - //! true for any `A` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. + //! Type: `true_type` if `allocator_traits::propagate_on_container_move_assignment::value` is + //! true for any `Allocator` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. typedef typename base_type:: propagate_on_container_move_assignment propagate_on_container_move_assignment; - //! Type: `true_type` if `allocator_traits::propagate_on_container_swap::value` is true for any - //! `A` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. + //! Type: `true_type` if `allocator_traits::propagate_on_container_swap::value` is true for any + //! `Allocator` in the set of `OuterAlloc` and `InnerAllocs...`; otherwise, false_type. typedef typename base_type:: propagate_on_container_swap propagate_on_container_swap; @@ -1211,9 +1211,9 @@ class scoped_allocator_adaptor outer_traits_type::deallocate(this->outer_allocator(), p, n); } - //! Returns: A new scoped_allocator_adaptor object where each allocator + //! Returns: Allocator new scoped_allocator_adaptor object where each allocator //! A in the adaptor is initialized from the result of calling - //! `allocator_traits::select_on_container_copy_construction()` on + //! `allocator_traits::select_on_container_copy_construction()` on //! the corresponding allocator in *this. scoped_allocator_adaptor select_on_container_copy_construction() const { diff --git a/3party/boost/boost/container/set.hpp b/3party/boost/boost/container/set.hpp index 09ada20033..3c6fcd56f1 100644 --- a/3party/boost/boost/container/set.hpp +++ b/3party/boost/boost/container/set.hpp @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -31,23 +32,18 @@ #include #endif -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { namespace container { -#else -namespace boost { -namespace container { -#endif /// @cond // Forward declarations of operators < and ==, needed for friend declaration. -template -inline bool operator==(const set& x, - const set& y); +template +inline bool operator==(const set& x, + const set& y); -template -inline bool operator<(const set& x, - const set& y); +template +inline bool operator<(const set& x, + const set& y); /// @endcond //! A set is a kind of associative container that supports unique keys (contains at @@ -58,41 +54,48 @@ inline bool operator<(const set& x, //! , and of an associative container. A set also provides most operations described in //! for unique keys. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template , class A = std::allocator > +template , class Allocator = std::allocator > #else -template +template #endif class set { /// @cond private: BOOST_COPYABLE_AND_MOVABLE(set) - typedef container_detail::rbtree, Pred, A> tree_t; + typedef container_detail::rbtree, Compare, Allocator> tree_t; tree_t m_tree; // red-black tree representing set - typedef typename container_detail:: - move_const_ref_type::type insert_const_ref_type; /// @endcond public: + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// + typedef Key key_type; + typedef Key value_type; + typedef Compare key_compare; + typedef Compare value_compare; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator; - // typedefs: - typedef typename tree_t::key_type key_type; - typedef typename tree_t::value_type value_type; - typedef typename tree_t::pointer pointer; - typedef typename tree_t::const_pointer const_pointer; - typedef typename tree_t::reference reference; - typedef typename tree_t::const_reference const_reference; - typedef Pred key_compare; - typedef Pred value_compare; - typedef typename tree_t::iterator iterator; - typedef typename tree_t::const_iterator const_iterator; - typedef typename tree_t::reverse_iterator reverse_iterator; - typedef typename tree_t::const_reverse_iterator const_reverse_iterator; - typedef typename tree_t::size_type size_type; - typedef typename tree_t::difference_type difference_type; - typedef typename tree_t::allocator_type allocator_type; - typedef typename tree_t::stored_allocator_type stored_allocator_type; + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructs an empty set. //! @@ -105,7 +108,7 @@ class set //! and allocator. //! //! Complexity: Constant. - explicit set(const Pred& comp, + explicit set(const Compare& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) {} @@ -116,9 +119,9 @@ class set //! Complexity: Linear in N if the range [first ,last ) is already sorted using //! comp and otherwise N logN, where N is last - first. template - set(InputIterator first, InputIterator last, const Pred& comp = Pred(), + set(InputIterator first, InputIterator last, const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, true) + : m_tree(true, first, last, comp, a) {} //! Effects: Constructs an empty set using the specified comparison object and @@ -131,7 +134,7 @@ class set //! Complexity: Linear in N. template set( ordered_unique_range_t, InputIterator first, InputIterator last - , const Pred& comp = Pred(), const allocator_type& a = allocator_type()) + , const Compare& comp = Compare(), const allocator_type& a = allocator_type()) : m_tree(ordered_range, first, last, comp, a) {} @@ -178,20 +181,6 @@ class set set& operator=(BOOST_RV_REF(set) x) { m_tree = boost::move(x.m_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return m_tree.key_comp(); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return m_tree.key_comp(); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -199,12 +188,32 @@ class set allocator_type get_allocator() const { return m_tree.get_allocator(); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. stored_allocator_type &get_stored_allocator() { return m_tree.get_stored_allocator(); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns an iterator to the first element contained in the container. //! //! Throws: Nothing. @@ -307,6 +316,12 @@ class set const_reverse_iterator crend() const { return m_tree.crend(); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -331,90 +346,15 @@ class set size_type max_size() const { return m_tree.max_size(); } - //! Effects: Swaps the contents of *this and x. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - void swap(set& x) - { m_tree.swap(x.m_tree); } - - //! Effects: Inserts x if and only if there is no element in the container - //! with key equivalent to the key of x. - //! - //! Returns: The bool component of the returned pair is true if and only - //! if the insertion takes place, and the iterator component of the pair - //! points to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic. - std::pair insert(insert_const_ref_type x) - { return priv_insert(x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - std::pair insert(T &x) - { return this->insert(const_cast(x)); } - - template - std::pair insert(const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(u); } - #endif - - //! Effects: Move constructs a new value from x if and only if there is - //! no element in the container with key equivalent to the key of x. - //! - //! Returns: The bool component of the returned pair is true if and only - //! if the insertion takes place, and the iterator component of the pair - //! points to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic. - std::pair insert(BOOST_RV_REF(value_type) x) - { return m_tree.insert_unique(boost::move(x)); } - - //! Effects: Inserts a copy of x in the container if and only if there is - //! no element in the container with key equivalent to the key of x. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(const_iterator p, insert_const_ref_type x) - { return priv_insert(p, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) - { return this->insert(position, const_cast(x)); } - - template - iterator insert( const_iterator position, const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(position, u); } - #endif - - //! Effects: Inserts an element move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent to the key of x. - //! - //! Complexity: Logarithmic. - iterator insert(const_iterator p, BOOST_RV_REF(value_type) x) - { return m_tree.insert_unique(p, boost::move(x)); } - - //! Requires: first, last are not iterators into *this. - //! - //! Effects: inserts each element from the range [first,last) if and only - //! if there is no element with key equivalent to the key of that element. - //! - //! Complexity: At most N log(size()+N) (N is the distance from first to last) - template - void insert(InputIterator first, InputIterator last) - { m_tree.insert_unique(first, last); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts an object x of type T constructed with + //! Effects: Inserts an object x of type Key constructed with //! std::forward(args)... if and only if there is //! no element in the container with equivalent value. //! and returns the iterator pointing to the @@ -425,14 +365,14 @@ class set //! points to the element with key equivalent to the key of x. //! //! Throws: If memory allocation throws or - //! T's in-place constructor throws. + //! Key's in-place constructor throws. //! //! Complexity: Logarithmic. template std::pair emplace(Args&&... args) { return m_tree.emplace_unique(boost::forward(args)...); } - //! Effects: Inserts an object of type T constructed with + //! Effects: Inserts an object of type Key constructed with //! std::forward(args)... if and only if there is //! no element in the container with equivalent value. //! p is a hint pointing to where the insert @@ -463,6 +403,66 @@ class set #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts x if and only if there is no element in the container + //! with key equivalent to the key of x. + //! + //! Returns: The bool component of the returned pair is true if and only + //! if the insertion takes place, and the iterator component of the pair + //! points to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic. + std::pair insert(const value_type &x); + + //! Effects: Move constructs a new value from x if and only if there is + //! no element in the container with key equivalent to the key of x. + //! + //! Returns: The bool component of the returned pair is true if and only + //! if the insertion takes place, and the iterator component of the pair + //! points to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic. + std::pair insert(value_type &&x); + #else + private: + typedef std::pair insert_return_pair; + public: + BOOST_MOVE_CONVERSION_AWARE_CATCH(insert, value_type, insert_return_pair, this->priv_insert) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x in the container if and only if there is + //! no element in the container with key equivalent to the key of x. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(const_iterator p, const value_type &x); + + //! Effects: Inserts an element move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent to the key of x. + //! + //! Complexity: Logarithmic. + iterator insert(const_iterator position, value_type &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator) + #endif + + //! Requires: first, last are not iterators into *this. + //! + //! Effects: inserts each element from the range [first,last) if and only + //! if there is no element with key equivalent to the key of that element. + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + template + void insert(InputIterator first, InputIterator last) + { m_tree.insert_unique(first, last); } + //! Effects: Erases the element pointed to by p. //! //! Returns: Returns an iterator pointing to the element immediately @@ -489,6 +489,14 @@ class set iterator erase(const_iterator first, const_iterator last) { return m_tree.erase(first, last); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(set& x) + { m_tree.swap(x.m_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -497,6 +505,32 @@ class set void clear() { m_tree.clear(); } + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. + //! + //! Complexity: Constant. + key_compare key_comp() const + { return m_tree.key_comp(); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. + //! + //! Complexity: Constant. + value_compare value_comp() const + { return m_tree.key_comp(); } + + ////////////////////////////////////////////// + // + // set operations + // + ////////////////////////////////////////////// + //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! @@ -504,7 +538,7 @@ class set iterator find(const key_type& x) { return m_tree.find(x); } - //! Returns: A const_iterator pointing to an element with the key + //! Returns: Allocator const_iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. @@ -524,7 +558,7 @@ class set iterator lower_bound(const key_type& x) { return m_tree.lower_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -538,7 +572,7 @@ class set iterator upper_bound(const key_type& x) { return m_tree.upper_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -548,15 +582,13 @@ class set //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair equal_range(const key_type& x) { return m_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair equal_range(const key_type& x) const { return m_tree.equal_range(x); } /// @cond @@ -567,47 +599,48 @@ class set friend bool operator< (const set&, const set&); private: - std::pair priv_insert(const T &x) - { return m_tree.insert_unique(x); } - - iterator priv_insert(const_iterator p, const T &x) - { return m_tree.insert_unique(p, x); } + template + std::pair priv_insert(BOOST_FWD_REF(KeyType) x) + { return m_tree.insert_unique(::boost::forward(x)); } + template + iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x) + { return m_tree.insert_unique(p, ::boost::forward(x)); } /// @endcond }; -template -inline bool operator==(const set& x, - const set& y) +template +inline bool operator==(const set& x, + const set& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const set& x, - const set& y) +template +inline bool operator<(const set& x, + const set& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const set& x, - const set& y) +template +inline bool operator!=(const set& x, + const set& y) { return !(x == y); } -template -inline bool operator>(const set& x, - const set& y) +template +inline bool operator>(const set& x, + const set& y) { return y < x; } -template -inline bool operator<=(const set& x, - const set& y) +template +inline bool operator<=(const set& x, + const set& y) { return !(y < x); } -template -inline bool operator>=(const set& x, - const set& y) +template +inline bool operator>=(const set& x, + const set& y) { return !(x < y); } -template -inline void swap(set& x, set& y) +template +inline void swap(set& x, set& y) { x.swap(y); } /// @cond @@ -616,23 +649,23 @@ inline void swap(set& x, set& y) /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ namespace container { // Forward declaration of operators < and ==, needed for friend declaration. -template -inline bool operator==(const multiset& x, - const multiset& y); +template +inline bool operator==(const multiset& x, + const multiset& y); -template -inline bool operator<(const multiset& x, - const multiset& y); +template +inline bool operator<(const multiset& x, + const multiset& y); /// @endcond //! A multiset is a kind of associative container that supports equivalent keys @@ -643,41 +676,49 @@ inline bool operator<(const multiset& x, //! container, and of an associative container). multiset also provides most operations //! described for duplicate keys. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template , class A = std::allocator > +template , class Allocator = std::allocator > #else -template +template #endif class multiset { /// @cond private: BOOST_COPYABLE_AND_MOVABLE(multiset) - typedef container_detail::rbtree, Pred, A> tree_t; + typedef container_detail::rbtree, Compare, Allocator> tree_t; tree_t m_tree; // red-black tree representing multiset - typedef typename container_detail:: - move_const_ref_type::type insert_const_ref_type; /// @endcond public: - // typedefs: - typedef typename tree_t::key_type key_type; - typedef typename tree_t::value_type value_type; - typedef typename tree_t::pointer pointer; - typedef typename tree_t::const_pointer const_pointer; - typedef typename tree_t::reference reference; - typedef typename tree_t::const_reference const_reference; - typedef Pred key_compare; - typedef Pred value_compare; - typedef typename tree_t::iterator iterator; - typedef typename tree_t::const_iterator const_iterator; - typedef typename tree_t::reverse_iterator reverse_iterator; - typedef typename tree_t::const_reverse_iterator const_reverse_iterator; - typedef typename tree_t::size_type size_type; - typedef typename tree_t::difference_type difference_type; - typedef typename tree_t::allocator_type allocator_type; - typedef typename tree_t::stored_allocator_type stored_allocator_type; + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// + typedef Key key_type; + typedef Key value_type; + typedef Compare key_compare; + typedef Compare value_compare; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator; + typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator; + + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Constructs an empty multiset using the specified comparison //! object and allocator. @@ -691,7 +732,7 @@ class multiset //! object and allocator. //! //! Complexity: Constant. - explicit multiset(const Pred& comp, + explicit multiset(const Compare& comp, const allocator_type& a = allocator_type()) : m_tree(comp, a) {} @@ -703,9 +744,9 @@ class multiset //! comp and otherwise N logN, where N is last - first. template multiset(InputIterator first, InputIterator last, - const Pred& comp = Pred(), + const Compare& comp = Compare(), const allocator_type& a = allocator_type()) - : m_tree(first, last, comp, a, false) + : m_tree(false, first, last, comp, a) {} //! Effects: Constructs an empty multiset using the specified comparison object and @@ -716,10 +757,10 @@ class multiset //! //! Complexity: Linear in N. template - multiset( ordered_range_t ordered_range, InputIterator first, InputIterator last - , const Pred& comp = Pred() + multiset( ordered_range_t ordered_range_, InputIterator first, InputIterator last + , const Compare& comp = Compare() , const allocator_type& a = allocator_type()) - : m_tree(ordered_range, first, last, comp, a) + : m_tree(ordered_range_, first, last, comp, a) {} //! Effects: Copy constructs a multiset. @@ -767,20 +808,6 @@ class multiset multiset& operator=(BOOST_RV_REF(multiset) x) { m_tree = boost::move(x.m_tree); return *this; } - //! Effects: Returns the comparison object out - //! of which a was constructed. - //! - //! Complexity: Constant. - key_compare key_comp() const - { return m_tree.key_comp(); } - - //! Effects: Returns an object of value_compare constructed out - //! of the comparison object. - //! - //! Complexity: Constant. - value_compare value_comp() const - { return m_tree.key_comp(); } - //! Effects: Returns a copy of the Allocator that //! was passed to the object's constructor. //! @@ -788,11 +815,31 @@ class multiset allocator_type get_allocator() const { return m_tree.get_allocator(); } + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() + { return m_tree.get_stored_allocator(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const { return m_tree.get_stored_allocator(); } - stored_allocator_type &get_stored_allocator() - { return m_tree.get_stored_allocator(); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the container. //! @@ -896,6 +943,12 @@ class multiset const_reverse_iterator crend() const { return m_tree.crend(); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + //! Effects: Returns true if the container contains no elements. //! //! Throws: Nothing. @@ -920,85 +973,15 @@ class multiset size_type max_size() const { return m_tree.max_size(); } - //! Effects: Swaps the contents of *this and x. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - void swap(multiset& x) - { m_tree.swap(x.m_tree); } - - //! Effects: Inserts x and returns the iterator pointing to the - //! newly inserted element. - //! - //! Complexity: Logarithmic. - iterator insert(insert_const_ref_type x) - { return priv_insert(x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(T &x) - { return this->insert(const_cast(x)); } - - template - iterator insert(const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(u); } - #endif - - //! Effects: Inserts a copy of x in the container. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(BOOST_RV_REF(value_type) x) - { return m_tree.insert_equal(boost::move(x)); } - - //! Effects: Inserts a copy of x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(const_iterator p, insert_const_ref_type x) - { return priv_insert(p, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) - { return this->insert(position, const_cast(x)); } - - template - iterator insert( const_iterator position, const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_insert(position, u); } - #endif - - //! Effects: Inserts a value move constructed from x in the container. - //! p is a hint pointing to where the insert should start to search. - //! - //! Returns: An iterator pointing to the element with key equivalent - //! to the key of x. - //! - //! Complexity: Logarithmic in general, but amortized constant if t - //! is inserted right before p. - iterator insert(const_iterator p, BOOST_RV_REF(value_type) x) - { return m_tree.insert_equal(p, boost::move(x)); } - - //! Requires: first, last are not iterators into *this. - //! - //! Effects: inserts each element from the range [first,last) . - //! - //! Complexity: At most N log(size()+N) (N is the distance from first to last) - template - void insert(InputIterator first, InputIterator last) - { m_tree.insert_equal(first, last); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts an object of type T constructed with + //! Effects: Inserts an object of type Key constructed with //! std::forward(args)... and returns the iterator pointing to the //! newly inserted element. //! @@ -1007,7 +990,7 @@ class multiset iterator emplace(Args&&... args) { return m_tree.emplace_equal(boost::forward(args)...); } - //! Effects: Inserts an object of type T constructed with + //! Effects: Inserts an object of type Key constructed with //! std::forward(args)... //! //! Returns: An iterator pointing to the element with key equivalent @@ -1037,6 +1020,61 @@ class multiset #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts x and returns the iterator pointing to the + //! newly inserted element. + //! + //! Complexity: Logarithmic. + iterator insert(const value_type &x); + + //! Effects: Inserts a copy of x in the container. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(value_type &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(insert, value_type, iterator, this->priv_insert) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(const_iterator p, const value_type &x); + + //! Effects: Inserts a value move constructed from x in the container. + //! p is a hint pointing to where the insert should start to search. + //! + //! Returns: An iterator pointing to the element with key equivalent + //! to the key of x. + //! + //! Complexity: Logarithmic in general, but amortized constant if t + //! is inserted right before p. + iterator insert(const_iterator position, value_type &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, value_type, iterator, this->priv_insert, const_iterator) + #endif + + //! Requires: first, last are not iterators into *this. + //! + //! Effects: inserts each element from the range [first,last) . + //! + //! Complexity: At most N log(size()+N) (N is the distance from first to last) + template + void insert(InputIterator first, InputIterator last) + { m_tree.insert_equal(first, last); } + //! Effects: Erases the element pointed to by p. //! //! Returns: Returns an iterator pointing to the element immediately @@ -1063,6 +1101,14 @@ class multiset iterator erase(const_iterator first, const_iterator last) { return m_tree.erase(first, last); } + //! Effects: Swaps the contents of *this and x. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + void swap(multiset& x) + { m_tree.swap(x.m_tree); } + //! Effects: erase(a.begin(),a.end()). //! //! Postcondition: size() == 0. @@ -1071,6 +1117,32 @@ class multiset void clear() { m_tree.clear(); } + ////////////////////////////////////////////// + // + // observers + // + ////////////////////////////////////////////// + + //! Effects: Returns the comparison object out + //! of which a was constructed. + //! + //! Complexity: Constant. + key_compare key_comp() const + { return m_tree.key_comp(); } + + //! Effects: Returns an object of value_compare constructed out + //! of the comparison object. + //! + //! Complexity: Constant. + value_compare value_comp() const + { return m_tree.key_comp(); } + + ////////////////////////////////////////////// + // + // set operations + // + ////////////////////////////////////////////// + //! Returns: An iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! @@ -1078,7 +1150,7 @@ class multiset iterator find(const key_type& x) { return m_tree.find(x); } - //! Returns: A const iterator pointing to an element with the key + //! Returns: Allocator const iterator pointing to an element with the key //! equivalent to x, or end() if such an element is not found. //! //! Complexity: Logarithmic. @@ -1098,7 +1170,7 @@ class multiset iterator lower_bound(const key_type& x) { return m_tree.lower_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than k, or a.end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1112,7 +1184,7 @@ class multiset iterator upper_bound(const key_type& x) { return m_tree.upper_bound(x); } - //! Returns: A const iterator pointing to the first element with key not + //! Returns: Allocator const iterator pointing to the first element with key not //! less than x, or end() if such an element is not found. //! //! Complexity: Logarithmic @@ -1122,15 +1194,13 @@ class multiset //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) + std::pair equal_range(const key_type& x) { return m_tree.equal_range(x); } //! Effects: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! Complexity: Logarithmic - std::pair - equal_range(const key_type& x) const + std::pair equal_range(const key_type& x) const { return m_tree.equal_range(x); } /// @cond @@ -1141,47 +1211,49 @@ class multiset friend bool operator< (const multiset&, const multiset&); private: - iterator priv_insert(const T &x) - { return m_tree.insert_equal(x); } + template + iterator priv_insert(BOOST_FWD_REF(KeyType) x) + { return m_tree.insert_equal(::boost::forward(x)); } - iterator priv_insert(const_iterator p, const T &x) - { return m_tree.insert_equal(p, x); } + template + iterator priv_insert(const_iterator p, BOOST_FWD_REF(KeyType) x) + { return m_tree.insert_equal(p, ::boost::forward(x)); } /// @endcond }; -template -inline bool operator==(const multiset& x, - const multiset& y) +template +inline bool operator==(const multiset& x, + const multiset& y) { return x.m_tree == y.m_tree; } -template -inline bool operator<(const multiset& x, - const multiset& y) +template +inline bool operator<(const multiset& x, + const multiset& y) { return x.m_tree < y.m_tree; } -template -inline bool operator!=(const multiset& x, - const multiset& y) +template +inline bool operator!=(const multiset& x, + const multiset& y) { return !(x == y); } -template -inline bool operator>(const multiset& x, - const multiset& y) +template +inline bool operator>(const multiset& x, + const multiset& y) { return y < x; } -template -inline bool operator<=(const multiset& x, - const multiset& y) +template +inline bool operator<=(const multiset& x, + const multiset& y) { return !(y < x); } -template -inline bool operator>=(const multiset& x, - const multiset& y) +template +inline bool operator>=(const multiset& x, + const multiset& y) { return !(x < y); } -template -inline void swap(multiset& x, multiset& y) +template +inline void swap(multiset& x, multiset& y) { x.swap(y); } /// @cond @@ -1190,10 +1262,10 @@ inline void swap(multiset& x, multiset& y) /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value && has_trivial_destructor::value; }; */ namespace container { diff --git a/3party/boost/boost/container/slist.hpp b/3party/boost/boost/container/slist.hpp index 57719357fc..c65a9a2d82 100644 --- a/3party/boost/boost/container/slist.hpp +++ b/3party/boost/boost/container/slist.hpp @@ -20,9 +20,11 @@ #include #include +#include #include #include #include +#include #include #include #include @@ -42,16 +44,14 @@ #include #include -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { namespace container { -#else -namespace boost { -namespace container { -#endif /// @cond +template +class slist; + namespace container_detail { template @@ -73,10 +73,10 @@ struct slist_node T m_data; }; -template +template struct intrusive_slist_type { - typedef boost::container::allocator_traits allocator_traits_type; + typedef boost::container::allocator_traits allocator_traits_type; typedef typename allocator_traits_type::value_type value_type; typedef typename boost::intrusive::pointer_traits ::template @@ -95,6 +95,99 @@ struct intrusive_slist_type typedef container_type type ; }; +template +class slist_const_iterator + : public std::iterator< std::forward_iterator_tag, T + , typename iiterator_types::difference_type + , typename iiterator_types::const_pointer + , typename iiterator_types::const_reference> +{ + protected: + + IIterator m_it; + + public: + typedef typename iiterator_types::const_pointer const_pointer; + typedef typename iiterator_types::const_reference const_reference; + + //Constructors + slist_const_iterator() + : m_it() + {} + + explicit slist_const_iterator(const IIterator &it) + : m_it(it) + {} + + //Pointer like operators + const_reference operator*() const + { return this->m_it->m_data; } + + const_pointer operator->() const + { return ::boost::intrusive::pointer_traits::pointer_to(this->m_it->m_data); } + + //Increment / Decrement + slist_const_iterator& operator++() + { ++this->m_it; return *this; } + + slist_const_iterator operator++(int) + { IIterator tmp = this->m_it; ++*this; return slist_const_iterator(tmp); } + + //Comparison operators + friend bool operator== (const slist_const_iterator& l, const slist_const_iterator& r) + { return l.m_it == r.m_it; } + + friend bool operator!= (const slist_const_iterator& l, const slist_const_iterator& r) + { return l.m_it != r.m_it; } + + IIterator &get() + { return this->m_it; } + + const IIterator &get() const + { return this->m_it; } +}; + +template +class slist_iterator + : public slist_const_iterator +{ + private: + typedef slist_const_iterator const_iterator; + + public: + typedef typename iiterator_types::pointer pointer; + typedef typename iiterator_types::reference reference; + + //Constructors + slist_iterator() + : const_iterator() + {} + + explicit slist_iterator(const IIterator &it) + : const_iterator(it) + {} + + //Pointer like operators + reference operator*() const + { return this->m_it->m_data; } + + pointer operator->() const + { return ::boost::intrusive::pointer_traits::to_pointer(this->m_it->m_data); } + + //Increment / Decrement + slist_iterator& operator++() + { ++this->m_it; return *this; } + + slist_iterator operator++(int) + { IIterator tmp = this->m_it; ++*this; return slist_iterator(tmp); } + + IIterator &get() + { return this->m_it; } + + const IIterator &get() const + { return this->m_it; } +}; + } //namespace container_detail { /// @endcond @@ -132,22 +225,19 @@ struct intrusive_slist_type //! needs, and that you often need to use insert and erase in the middle of the list, //! then you should probably use list instead of slist. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template > +template > #else -template +template #endif class slist : protected container_detail::node_alloc_holder - ::type> + ::type> { /// @cond - typedef typename container_detail:: - move_const_ref_type::type insert_const_ref_type; typedef typename - container_detail::intrusive_slist_type::type Icont; - typedef container_detail::node_alloc_holder AllocHolder; + container_detail::intrusive_slist_type::type Icont; + typedef container_detail::node_alloc_holder AllocHolder; typedef typename AllocHolder::NodePtr NodePtr; - typedef slist ThisType; typedef typename AllocHolder::NodeAlloc NodeAlloc; typedef typename AllocHolder::ValAlloc ValAlloc; typedef typename AllocHolder::Node Node; @@ -155,7 +245,7 @@ class slist typedef typename AllocHolder::allocator_v1 allocator_v1; typedef typename AllocHolder::allocator_v2 allocator_v2; typedef typename AllocHolder::alloc_version alloc_version; - typedef boost::container::allocator_traits allocator_traits_type; + typedef boost::container::allocator_traits allocator_traits_type; class equal_to_value { @@ -185,126 +275,39 @@ class slist bool operator()(const Node &a) const { return static_cast(*this)(a.m_data); } }; - /// @endcond - public: - //! The type of object, T, stored in the list - typedef T value_type; - //! Pointer to T - typedef typename allocator_traits_type::pointer pointer; - //! Const pointer to T - typedef typename allocator_traits_type::const_pointer const_pointer; - //! Reference to T - typedef typename allocator_traits_type::reference reference; - //! Const reference to T - typedef typename allocator_traits_type::const_reference const_reference; - //! An unsigned integral type - typedef typename allocator_traits_type::size_type size_type; - //! A signed integral type - typedef typename allocator_traits_type::difference_type difference_type; - //! The allocator type - typedef A allocator_type; - //! Non-standard extension: the stored allocator type - typedef NodeAlloc stored_allocator_type; - /// @cond - private: BOOST_COPYABLE_AND_MOVABLE(slist) - typedef difference_type list_difference_type; - typedef pointer list_pointer; - typedef const_pointer list_const_pointer; - typedef reference list_reference; - typedef const_reference list_const_reference; + typedef container_detail::slist_iterator iterator_impl; + typedef container_detail::slist_const_iteratorconst_iterator_impl; /// @endcond public: + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// - //! Const iterator used to iterate through a list. - class const_iterator - /// @cond - : public std::iterator - { - - protected: - typename Icont::iterator m_it; - explicit const_iterator(typename Icont::iterator it) : m_it(it){} - void prot_incr(){ ++m_it; } - - private: - typename Icont::iterator get() - { return this->m_it; } - - public: - friend class slist; - typedef list_difference_type difference_type; - - //Constructors - const_iterator() - : m_it() - {} - - //Pointer like operators - const_reference operator*() const - { return m_it->m_data; } - - const_pointer operator->() const - { return const_pointer(&m_it->m_data); } - - //Increment / Decrement - const_iterator& operator++() - { prot_incr(); return *this; } - - const_iterator operator++(int) - { typename Icont::iterator tmp = m_it; ++*this; return const_iterator(tmp); } - - //Comparison operators - bool operator== (const const_iterator& r) const - { return m_it == r.m_it; } - - bool operator!= (const const_iterator& r) const - { return m_it != r.m_it; } - } - /// @endcond - ; - - //! Iterator used to iterate through a list - class iterator - /// @cond - : public const_iterator - { - - private: - explicit iterator(typename Icont::iterator it) - : const_iterator(it) - {} - - typename Icont::iterator get() - { return this->m_it; } - - public: - friend class slist; - typedef list_pointer pointer; - typedef list_reference reference; - - //Constructors - iterator(){} - - //Pointer like operators - reference operator*() const { return this->m_it->m_data; } - pointer operator->() const { return pointer(&this->m_it->m_data); } - - //Increment / Decrement - iterator& operator++() - { this->prot_incr(); return *this; } - - iterator operator++(int) - { typename Icont::iterator tmp = this->m_it; ++*this; return iterator(tmp); } - } - /// @endcond - ; + typedef T value_type; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef BOOST_CONTAINER_IMPDEF(NodeAlloc) stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator; + typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator; public: + + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// + //! Effects: Constructs a list taking the allocator as parameter. //! //! Throws: If allocator_type's copy constructor throws. @@ -336,7 +339,7 @@ class slist //! Complexity: Linear to n. explicit slist(size_type n, const value_type& x, const allocator_type& a = allocator_type()) : AllocHolder(a) - { this->priv_create_and_insert_nodes(this->before_begin(), n, x); } + { this->insert_after(this->cbefore_begin(), n, x); } //! Effects: Constructs a list that will use a copy of allocator a //! and inserts a copy of the range [first, last) in the list. @@ -346,10 +349,9 @@ class slist //! //! Complexity: Linear to the range [first, last). template - slist(InpIt first, InpIt last, - const allocator_type& a = allocator_type()) + slist(InpIt first, InpIt last, const allocator_type& a = allocator_type()) : AllocHolder(a) - { this->insert_after(this->before_begin(), first, last); } + { this->insert_after(this->cbefore_begin(), first, last); } //! Effects: Copy constructs a list. //! @@ -360,7 +362,7 @@ class slist //! Complexity: Linear to the elements x contains. slist(const slist& x) : AllocHolder(x) - { this->insert_after(this->before_begin(), x.begin(), x.end()); } + { this->insert_after(this->cbefore_begin(), x.begin(), x.end()); } //! Effects: Move constructor. Moves mx's resources to *this. //! @@ -380,7 +382,7 @@ class slist //! Complexity: Linear to the elements x contains. slist(const slist& x, const allocator_type &a) : AllocHolder(a) - { this->insert_after(this->before_begin(), x.begin(), x.end()); } + { this->insert_after(this->cbefore_begin(), x.begin(), x.end()); } //! Effects: Move constructor using the specified allocator. //! Moves x's resources to *this. @@ -399,6 +401,15 @@ class slist } } + //! Effects: Destroys the list. All stored values are destroyed + //! and used memory is deallocated. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements. + ~slist() + {} //AllocHolder clears the slist + //! Effects: Makes *this contain the same elements as x. //! //! Postcondition: this->size() == x.size(). *this contains a copy @@ -454,14 +465,46 @@ class slist return *this; } - //! Effects: Destroys the list. All stored values are destroyed - //! and used memory is deallocated. + //! Effects: Assigns the n copies of val to *this. //! - //! Throws: Nothing. + //! Throws: If memory allocation throws or T's copy constructor throws. //! - //! Complexity: Linear to the number of elements. - ~slist() - {} //AllocHolder clears the slist + //! Complexity: Linear to n. + void assign(size_type n, const T& val) + { + typedef constant_iterator cvalue_iterator; + return this->assign(cvalue_iterator(val, n), cvalue_iterator()); + } + + //! Effects: Assigns the range [first, last) to *this. + //! + //! Throws: If memory allocation throws or + //! T's constructor from dereferencing InpIt throws. + //! + //! Complexity: Linear to n. + template + void assign(InpIt first, InpIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + >::type * = 0 + #endif + ) + { + iterator end_n(this->end()); + iterator prev(this->before_begin()); + iterator node(this->begin()); + while (node != end_n && first != last){ + *node = *first; + prev = node; + ++node; + ++first; + } + if (first != last) + this->insert_after(prev, first, last); + else + this->erase_after(prev, end_n); + } //! Effects: Returns a copy of the internal allocator. //! @@ -471,35 +514,51 @@ class slist allocator_type get_allocator() const { return allocator_type(this->node_alloc()); } - const stored_allocator_type &get_stored_allocator() const - { return this->node_alloc(); } - + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. stored_allocator_type &get_stored_allocator() { return this->node_alloc(); } - public: + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const + { return this->node_alloc(); } - //! Effects: Assigns the n copies of val to *this. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n. - void assign(size_type n, const T& val) - { this->priv_fill_assign(n, val); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// - //! Effects: Assigns the range [first, last) to *this. + //! Effects: Returns a non-dereferenceable iterator that, + //! when incremented, yields begin(). This iterator may be used + //! as the argument to insert_after, erase_after, etc. //! - //! Throws: If memory allocation throws or - //! T's constructor from dereferencing InpIt throws. + //! Throws: Nothing. //! - //! Complexity: Linear to n. - template - void assign(InpIt first, InpIt last) - { - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_assign_dispatch(first, last, Result()); - } + //! Complexity: Constant. + iterator before_begin() + { return iterator(end()); } + + //! Effects: Returns a non-dereferenceable const_iterator + //! that, when incremented, yields begin(). This iterator may be used + //! as the argument to insert_after, erase_after, etc. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_iterator before_begin() const + { return this->cbefore_begin(); } //! Effects: Returns an iterator to the first element contained in the list. //! @@ -533,25 +592,15 @@ class slist const_iterator end() const { return this->cend(); } - //! Effects: Returns a non-dereferenceable iterator that, - //! when incremented, yields begin(). This iterator may be used - //! as the argument toinsert_after, erase_after, etc. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - iterator before_begin() - { return iterator(end()); } - //! Effects: Returns a non-dereferenceable const_iterator //! that, when incremented, yields begin(). This iterator may be used - //! as the argument toinsert_after, erase_after, etc. + //! as the argument to insert_after, erase_after, etc. //! //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator before_begin() const - { return this->cbefore_begin(); } + const_iterator cbefore_begin() const + { return const_iterator(end()); } //! Effects: Returns a const_iterator to the first element contained in the list. //! @@ -569,15 +618,43 @@ class slist const_iterator cend() const { return const_iterator(this->non_const_icont().end()); } - //! Effects: Returns a non-dereferenceable const_iterator - //! that, when incremented, yields begin(). This iterator may be used - //! as the argument toinsert_after, erase_after, etc. + //! Returns: The iterator to the element before i in the sequence. + //! Returns the end-iterator, if either i is the begin-iterator or the + //! sequence is empty. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements before i. + //! + //! Note: Non-standard extension. + iterator previous(iterator p) + { return iterator(this->icont().previous(p.get())); } + + //! Returns: The const_iterator to the element before i in the sequence. + //! Returns the end-const_iterator, if either i is the begin-const_iterator or + //! the sequence is empty. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements before i. + //! + //! Note: Non-standard extension. + const_iterator previous(const_iterator p) + { return const_iterator(this->icont().previous(p.get())); } + + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + + //! Effects: Returns true if the list contains no elements. //! //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator cbefore_begin() const - { return const_iterator(end()); } + bool empty() const + { return !this->size(); } //! Effects: Returns the number of the elements contained in the list. //! @@ -595,21 +672,40 @@ class slist size_type max_size() const { return AllocHolder::max_size(); } - //! Effects: Returns true if the list contains no elements. + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are default constructed. //! - //! Throws: Nothing. + //! Throws: If memory allocation throws, or T's copy constructor throws. //! - //! Complexity: Constant. - bool empty() const - { return !this->size(); } + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size) + { + const_iterator last_pos; + if(!priv_try_shrink(new_size, last_pos)){ + typedef default_construct_iterator default_iterator; + this->insert_after(last_pos, default_iterator(new_size - this->size()), default_iterator()); + } + } - //! Effects: Swaps the contents of *this and x. + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. //! - //! Throws: Nothing. + //! Throws: If memory allocation throws, or T's copy constructor throws. //! - //! Complexity: Linear to the number of elements on *this and x. - void swap(slist& x) - { AllocHolder::swap(x); } + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size, const T& x) + { + const_iterator last_pos; + if(!priv_try_shrink(new_size, last_pos)){ + this->insert_after(last_pos, new_size, x); + } + } + + ////////////////////////////////////////////// + // + // element access + // + ////////////////////////////////////////////// //! Requires: !empty() //! @@ -633,188 +729,11 @@ class slist const_reference front() const { return *this->begin(); } - //! Effects: Inserts a copy of t in the beginning of the list. - //! - //! Throws: If memory allocation throws or - //! T's copy constructor throws. - //! - //! Complexity: Amortized constant time. - void push_front(insert_const_ref_type x) - { return priv_push_front(x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - void push_front(T &x) { push_front(const_cast(x)); } - - template - void push_front(const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_push_front(u); } - #endif - - //! Effects: Constructs a new element in the beginning of the list - //! and moves the resources of t to this new element. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Amortized constant time. - void push_front(BOOST_RV_REF(T) x) - { this->icont().push_front(*this->create_node(boost::move(x))); } - - //! Effects: Removes the first element from the list. - //! - //! Throws: Nothing. - //! - //! Complexity: Amortized constant time. - void pop_front() - { this->icont().pop_front_and_dispose(Destroyer(this->node_alloc())); } - - //! Returns: The iterator to the element before i in the sequence. - //! Returns the end-iterator, if either i is the begin-iterator or the - //! sequence is empty. - //! - //! Throws: Nothing. - //! - //! Complexity: Linear to the number of elements before i. - iterator previous(iterator p) - { return iterator(this->icont().previous(p.get())); } - - //! Returns: The const_iterator to the element before i in the sequence. - //! Returns the end-const_iterator, if either i is the begin-const_iterator or - //! the sequence is empty. - //! - //! Throws: Nothing. - //! - //! Complexity: Linear to the number of elements before i. - const_iterator previous(const_iterator p) - { return const_iterator(this->icont().previous(p.get())); } - - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Inserts a copy of the value after the p pointed - //! by prev_p. - //! - //! Returns: An iterator to the inserted element. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Amortized constant time. - //! - //! Note: Does not affect the validity of iterators and references of - //! previous values. - iterator insert_after(const_iterator prev_pos, insert_const_ref_type x) - { return this->priv_insert_after(prev_pos, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert_after(const_iterator position, T &x) - { return this->insert_after(position, const_cast(x)); } - - template - iterator insert_after( const_iterator position, const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return this->priv_insert_after(position, u); } - #endif - - //! Requires: prev_pos must be a valid iterator of *this. - //! - //! Effects: Inserts a move constructed copy object from the value after the - //! p pointed by prev_pos. - //! - //! Returns: An iterator to the inserted element. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Amortized constant time. - //! - //! Note: Does not affect the validity of iterators and references of - //! previous values. - iterator insert_after(const_iterator prev_pos, BOOST_RV_REF(value_type) x) - { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(boost::move(x)))); } - - //! Requires: prev_pos must be a valid iterator of *this. - //! - //! Effects: Inserts n copies of x after prev_pos. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n. - //! - //! Note: Does not affect the validity of iterators and references of - //! previous values. - void insert_after(const_iterator prev_pos, size_type n, const value_type& x) - { this->priv_create_and_insert_nodes(prev_pos, n, x); } - - //! Requires: prev_pos must be a valid iterator of *this. - //! - //! Effects: Inserts the range pointed by [first, last) - //! after the p prev_pos. - //! - //! Throws: If memory allocation throws, T's constructor from a - //! dereferenced InpIt throws. - //! - //! Complexity: Linear to the number of elements inserted. - //! - //! Note: Does not affect the validity of iterators and references of - //! previous values. - template - void insert_after(const_iterator prev_pos, InIter first, InIter last) - { - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_insert_after_range_dispatch(prev_pos, first, last, Result()); - } - - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Insert a copy of x before p. - //! - //! Throws: If memory allocation throws or x's copy constructor throws. - //! - //! Complexity: Linear to the elements before p. - iterator insert(const_iterator position, insert_const_ref_type x) - { return this->priv_insert(position, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) - { return this->insert(position, const_cast(x)); } - - template - iterator insert( const_iterator position, const U &u - , typename container_detail::enable_if_c::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return this->priv_insert(position, u); } - #endif - - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Insert a new element before p with mx's resources. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Linear to the elements before p. - iterator insert(const_iterator p, BOOST_RV_REF(value_type) x) - { return this->insert_after(previous(p), boost::move(x)); } - - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Inserts n copies of x before p. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n plus linear to the elements before p. - void insert(const_iterator p, size_type n, const value_type& x) - { return this->insert_after(previous(p), n, x); } - - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Insert a copy of the [first, last) range before p. - //! - //! Throws: If memory allocation throws, T's constructor from a - //! dereferenced InpIt throws. - //! - //! Complexity: Linear to std::distance [first, last) plus - //! linear to the elements before p. - template - void insert(const_iterator p, InIter first, InIter last) - { return this->insert_after(previous(p), first, last); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -829,17 +748,6 @@ class slist void emplace_front(Args&&... args) { this->emplace_after(this->cbefore_begin(), boost::forward(args)...); } - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... before p - //! - //! Throws: If memory allocation throws or - //! T's in-place constructor throws. - //! - //! Complexity: Linear to the elements before p - template - iterator emplace(const_iterator p, Args&&... args) - { return this->emplace_after(this->previous(p), boost::forward(args)...); } - //! Effects: Inserts an object of type T constructed with //! std::forward(args)... after prev //! @@ -865,15 +773,6 @@ class slist } \ \ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - iterator emplace (const_iterator p \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { \ - return this->emplace_after \ - (this->previous(p) \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ - } \ - \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ iterator emplace_after(const_iterator prev \ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ { \ @@ -887,6 +786,139 @@ class slist #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the beginning of the list. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_front(const T &x); + + //! Effects: Constructs a new element in the beginning of the list + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_front(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front) + #endif + + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Inserts a copy of the value after the position pointed + //! by prev_p. + //! + //! Returns: An iterator to the inserted element. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + //! + //! Note: Does not affect the validity of iterators and references of + //! previous values. + iterator insert_after(const_iterator prev_pos, const T &x); + + //! Requires: prev_pos must be a valid iterator of *this. + //! + //! Effects: Inserts a move constructed copy object from the value after the + //! p pointed by prev_pos. + //! + //! Returns: An iterator to the inserted element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + //! + //! Note: Does not affect the validity of iterators and references of + //! previous values. + iterator insert_after(const_iterator prev_pos, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert_after, T, iterator, priv_insert_after, const_iterator) + #endif + + //! Requires: prev_pos must be a valid iterator of *this. + //! + //! Effects: Inserts n copies of x after prev_pos. + //! + //! Returns: an iterator to the last inserted element or prev_pos if n is 0. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! + //! Complexity: Linear to n. + //! + //! Note: Does not affect the validity of iterators and references of + //! previous values. + iterator insert_after(const_iterator prev_pos, size_type n, const value_type& x) + { + typedef constant_iterator cvalue_iterator; + return this->insert_after(prev_pos, cvalue_iterator(x, n), cvalue_iterator()); + } + + //! Requires: prev_pos must be a valid iterator of *this. + //! + //! Effects: Inserts the range pointed by [first, last) + //! after the position prev_pos. + //! + //! Returns: an iterator to the last inserted element or prev_pos if first == last. + //! + //! Throws: If memory allocation throws, T's constructor from a + //! dereferenced InpIt throws. + //! + //! Complexity: Linear to the number of elements inserted. + //! + //! Note: Does not affect the validity of iterators and references of + //! previous values. + template + iterator insert_after(const_iterator prev_pos, InpIt first, InpIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && (container_detail::is_input_iterator::value + || container_detail::is_same::value + ) + >::type * = 0 + #endif + ) + { + iterator ret_it(prev_pos.get()); + for (; first != last; ++first){ + ret_it = iterator(this->icont().insert_after(ret_it.get(), *this->create_node_from_it(first))); + } + return ret_it; + } + + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + iterator insert_after(const_iterator prev, FwdIt first, FwdIt last + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !(container_detail::is_input_iterator::value + || container_detail::is_same::value + ) + >::type * = 0 + ) + { + //Optimized allocation and construction + insertion_functor func(this->icont(), prev.get()); + this->allocate_many_and_construct(first, std::distance(first, last), func); + return iterator(func.inserted_first()); + } + #endif + + //! Effects: Removes the first element from the list. + //! + //! Throws: Nothing. + //! + //! Complexity: Amortized constant time. + void pop_front() + { this->icont().pop_front_and_dispose(Destroyer(this->node_alloc())); } + //! Effects: Erases the element after the element pointed by prev_pos //! of the list. //! @@ -919,69 +951,13 @@ class slist return iterator(this->icont().erase_after_and_dispose(before_first.get(), last.get(), Destroyer(this->node_alloc()))); } - //! Requires: p must be a valid iterator of *this. - //! - //! Effects: Erases the element at p p. + //! Effects: Swaps the contents of *this and x. //! //! Throws: Nothing. //! - //! Complexity: Linear to the number of elements before p. - iterator erase(const_iterator p) - { return iterator(this->erase_after(previous(p))); } - - //! Requires: first and last must be valid iterator to elements in *this. - //! - //! Effects: Erases the elements pointed by [first, last). - //! - //! Throws: Nothing. - //! - //! Complexity: Linear to the distance between first and last plus - //! linear to the elements before first. - iterator erase(const_iterator first, const_iterator last) - { return iterator(this->erase_after(previous(first), last)); } - - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are copy constructed from x. - //! - //! Throws: If memory allocation throws, or T's copy constructor throws. - //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size, const T& x) - { - typename Icont::iterator end_n(this->icont().end()), cur(this->icont().before_begin()), cur_next; - while (++(cur_next = cur) != end_n && new_size > 0){ - --new_size; - cur = cur_next; - } - if (cur_next != end_n) - this->erase_after(const_iterator(cur), const_iterator(end_n)); - else - this->insert_after(const_iterator(cur), new_size, x); - } - - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are default constructed. - //! - //! Throws: If memory allocation throws, or T's copy constructor throws. - //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size) - { - typename Icont::iterator end_n(this->icont().end()), cur(this->icont().before_begin()), cur_next; - size_type len = this->size(); - size_type left = new_size; - - while (++(cur_next = cur) != end_n && left > 0){ - --left; - cur = cur_next; - } - if (cur_next != end_n){ - this->erase_after(const_iterator(cur), const_iterator(end_n)); - } - else{ - this->priv_create_and_insert_nodes(const_iterator(cur), new_size - len); - } - } + //! Complexity: Linear to the number of elements on *this and x. + void swap(slist& x) + { AllocHolder::swap(x); } //! Effects: Erases all the elements of the list. //! @@ -991,6 +967,12 @@ class slist void clear() { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); } + ////////////////////////////////////////////// + // + // slist operations + // + ////////////////////////////////////////////// + //! Requires: p must point to an element contained //! by the list. x != *this //! @@ -1006,14 +988,27 @@ class slist //! this list. Iterators of this list and all the references are not invalidated. void splice_after(const_iterator prev_pos, slist& x) { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice_after(prev_pos.get(), x.icont()); - } - else{ - throw std::runtime_error("slist::splice called with unequal allocators"); - } + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice_after(prev_pos.get(), x.icont()); } + //! Requires: p must point to an element contained + //! by the list. x != *this + //! + //! Effects: Transfers all the elements of list x to this list, after the + //! the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear to the elements in x. + //! + //! Note: Iterators of values obtained from list x now point to elements of + //! this list. Iterators of this list and all the references are not invalidated. + void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x) + { this->splice_after(prev_pos, static_cast(x)); } + //! Requires: prev_pos must be a valid iterator of this. //! i must point to an element contained in list x. //! @@ -1030,14 +1025,28 @@ class slist //! list. Iterators of this list and all the references are not invalidated. void splice_after(const_iterator prev_pos, slist& x, const_iterator prev) { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice_after(prev_pos.get(), x.icont(), prev.get()); - } - else{ - throw std::runtime_error("slist::splice called with unequal allocators"); - } + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice_after(prev_pos.get(), x.icont(), prev.get()); } + //! Requires: prev_pos must be a valid iterator of this. + //! i must point to an element contained in list x. + //! + //! Effects: Transfers the value pointed by i, from list x to this list, + //! after the element pointed by prev_pos. + //! If prev_pos == prev or prev_pos == ++prev, this function is a null operation. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Constant. + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x, const_iterator prev) + { this->splice_after(prev_pos, static_cast(x), prev); } + //! Requires: prev_pos must be a valid iterator of this. //! before_first and before_last must be valid iterators of x. //! prev_pos must not be contained in [before_first, before_last) range. @@ -1055,15 +1064,30 @@ class slist void splice_after(const_iterator prev_pos, slist& x, const_iterator before_first, const_iterator before_last) { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice_after - (prev_pos.get(), x.icont(), before_first.get(), before_last.get()); - } - else{ - throw std::runtime_error("slist::splice called with unequal allocators"); - } + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice_after + (prev_pos.get(), x.icont(), before_first.get(), before_last.get()); } + //! Requires: prev_pos must be a valid iterator of this. + //! before_first and before_last must be valid iterators of x. + //! prev_pos must not be contained in [before_first, before_last) range. + //! + //! Effects: Transfers the range [before_first + 1, before_last + 1) + //! from list x to this list, after the element pointed by prev_pos. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear to the number of transferred elements. + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x, + const_iterator before_first, const_iterator before_last) + { this->splice_after(prev_pos, static_cast(x), before_first, before_last); } + //! Requires: prev_pos must be a valid iterator of this. //! before_first and before_last must be valid iterators of x. //! prev_pos must not be contained in [before_first, before_last) range. @@ -1083,74 +1107,31 @@ class slist const_iterator before_first, const_iterator before_last, size_type n) { - if((NodeAlloc&)*this == (NodeAlloc&)x){ - this->icont().splice_after - (prev_pos.get(), x.icont(), before_first.get(), before_last.get(), n); - } - else{ - throw std::runtime_error("slist::splice called with unequal allocators"); - } + BOOST_ASSERT(*this != x); + BOOST_ASSERT(this->node_alloc() == x.node_alloc()); + this->icont().splice_after + (prev_pos.get(), x.icont(), before_first.get(), before_last.get(), n); } - //! Requires: p must point to an element contained - //! by the list. x != *this + //! Requires: prev_pos must be a valid iterator of this. + //! before_first and before_last must be valid iterators of x. + //! prev_pos must not be contained in [before_first, before_last) range. + //! n == std::distance(before_first, before_last) //! - //! Effects: Transfers all the elements of list x to this list, before the - //! the element pointed by p. No destructors or copy constructors are called. + //! Effects: Transfers the range [before_first + 1, before_last + 1) + //! from list x to this list, after the element pointed by prev_pos. //! //! Throws: std::runtime_error if this' allocator and x's allocator //! are not equal. //! - //! Complexity: Linear in distance(begin(), p), and linear in x.size(). - //! - //! Note: Iterators of values obtained from list x now point to elements of - //! this list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, ThisType& x) - { this->splice_after(this->previous(p), x); } - - //! Requires: p must point to an element contained - //! by this list. i must point to an element contained in list x. - //! - //! Effects: Transfers the value pointed by i, from list x to this list, - //! before the the element pointed by p. No destructors or copy constructors are called. - //! If p == i or p == ++i, this function is a null operation. - //! - //! Throws: std::runtime_error if this' allocator and x's allocator - //! are not equal. - //! - //! Complexity: Linear in distance(begin(), p), and in distance(x.begin(), i). + //! Complexity: Constant. //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, slist& x, const_iterator i) - { this->splice_after(previous(p), x, i); } - - //! Requires: p must point to an element contained - //! by this list. first and last must point to elements contained in list x. - //! - //! Effects: Transfers the range pointed by first and last from list x to this list, - //! before the the element pointed by p. No destructors or copy constructors are called. - //! - //! Throws: std::runtime_error if this' allocator and x's allocator - //! are not equal. - //! - //! Complexity: Linear in distance(begin(), p), in distance(x.begin(), first), - //! and in distance(first, last). - //! - //! Note: Iterators of values obtained from list x now point to elements of this - //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, slist& x, const_iterator first, const_iterator last) - { this->splice_after(previous(p), x, previous(first), previous(last)); } - - //! Effects: Reverses the order of elements in the list. - //! - //! Throws: Nothing. - //! - //! Complexity: This function is linear time. - //! - //! Note: Iterators and references are not invalidated - void reverse() - { this->icont().reverse(); } + void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x, + const_iterator before_first, const_iterator before_last, + size_type n) + { this->splice_after(prev_pos, static_cast(x), before_first, before_last, n); } //! Effects: Removes all the elements that compare equal to value. //! @@ -1161,7 +1142,7 @@ class slist //! Note: The relative order of elements that are not removed is unchanged, //! and iterators to elements that are not removed remain valid. void remove(const T& value) - { remove_if(equal_to_value(value)); } + { this->remove_if(equal_to_value(value)); } //! Effects: Removes all the elements for which a specified //! predicate is satisfied. @@ -1221,6 +1202,20 @@ class slist void merge(slist & x) { this->merge(x, value_less()); } + //! Requires: The lists x and *this must be distinct. + //! + //! Effects: This function removes all of x's elements and inserts them + //! in order into *this according to std::less. The merge is stable; + //! that is, if an element from *this is equivalent to one from x, then the element + //! from *this will precede the one from x. + //! + //! Throws: Nothing. + //! + //! Complexity: This function is linear time: it performs at most + //! size() + x.size() - 1 comparisons. + void merge(BOOST_RV_REF(slist) x) + { this->merge(static_cast(x)); } + //! Requires: p must be a comparison function that induces a strict weak //! ordering and both *this and x must be sorted according to that ordering //! The lists x and *this must be distinct. @@ -1247,6 +1242,24 @@ class slist } } + //! Requires: p must be a comparison function that induces a strict weak + //! ordering and both *this and x must be sorted according to that ordering + //! The lists x and *this must be distinct. + //! + //! Effects: This function removes all of x's elements and inserts them + //! in order into *this. The merge is stable; that is, if an element from *this is + //! equivalent to one from x, then the element from *this will precede the one from x. + //! + //! Throws: Nothing. + //! + //! Complexity: This function is linear time: it performs at most + //! size() + x.size() - 1 comparisons. + //! + //! Note: Iterators and references to *this are not invalidated. + template + void merge(BOOST_RV_REF(slist) x, StrictWeakOrdering comp) + { this->merge(static_cast(x), comp); } + //! Effects: This function sorts the list *this according to std::less. //! The sort is stable, that is, the relative order of equivalent elements is preserved. //! @@ -1277,42 +1290,266 @@ class slist this->icont().sort(ValueCompareToNodeCompare(comp)); } - /// @cond - private: - iterator priv_insert(const_iterator p, const value_type& x) - { return this->insert_after(previous(p), x); } + //! Effects: Reverses the order of elements in the list. + //! + //! Throws: Nothing. + //! + //! Complexity: This function is linear time. + //! + //! Note: Iterators and references are not invalidated + void reverse() + { this->icont().reverse(); } - iterator priv_insert_after(const_iterator prev_pos, const value_type& x) - { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(x))); } + ////////////////////////////////////////////// + // + // list compatibility interface + // + ////////////////////////////////////////////// - void priv_push_front(const value_type &x) - { this->icont().push_front(*this->create_node(x)); } + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //Iterator range version - template - void priv_create_and_insert_nodes - (const_iterator prev, InpIterator beg, InpIterator end) + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... before p + //! + //! Throws: If memory allocation throws or + //! T's in-place constructor throws. + //! + //! Complexity: Linear to the elements before p + template + iterator emplace(const_iterator p, Args&&... args) + { return this->emplace_after(this->previous(p), boost::forward(args)...); } + + #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace (const_iterator p \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + return this->emplace_after \ + (this->previous(p) \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + } \ + //! + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Insert a copy of x before p. + //! + //! Returns: an iterator to the inserted element. + //! + //! Throws: If memory allocation throws or x's copy constructor throws. + //! + //! Complexity: Linear to the elements before p. + iterator insert(const_iterator position, const T &x); + + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Insert a new element before p with mx's resources. + //! + //! Returns: an iterator to the inserted element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Linear to the elements before p. + iterator insert(const_iterator prev_pos, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) + #endif + + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Inserts n copies of x before p. + //! + //! Returns: an iterator to the first inserted element or p if n == 0. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n plus linear to the elements before p. + iterator insert(const_iterator p, size_type n, const value_type& x) { - typedef typename std::iterator_traits::iterator_category ItCat; - priv_create_and_insert_nodes(prev, beg, end, alloc_version(), ItCat()); + const_iterator prev(this->previous(p)); + this->insert_after(prev, n, x); + return ++iterator(prev.get()); + } + + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Insert a copy of the [first, last) range before p. + //! + //! Returns: an iterator to the first inserted element or p if first == last. + //! + //! Throws: If memory allocation throws, T's constructor from a + //! dereferenced InpIt throws. + //! + //! Complexity: Linear to std::distance [first, last) plus + //! linear to the elements before p. + template + iterator insert(const_iterator p, InIter first, InIter last) + { + const_iterator prev(this->previous(p)); + this->insert_after(prev, first, last); + return ++iterator(prev.get()); } - template - void priv_create_and_insert_nodes - (const_iterator prev, InpIterator beg, InpIterator end, allocator_v1, std::input_iterator_tag) + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Erases the element at p p. + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the number of elements before p. + iterator erase(const_iterator p) + { return iterator(this->erase_after(previous(p))); } + + //! Requires: first and last must be valid iterator to elements in *this. + //! + //! Effects: Erases the elements pointed by [first, last). + //! + //! Throws: Nothing. + //! + //! Complexity: Linear to the distance between first and last plus + //! linear to the elements before first. + iterator erase(const_iterator first, const_iterator last) + { return iterator(this->erase_after(previous(first), last)); } + + //! Requires: p must point to an element contained + //! by the list. x != *this + //! + //! Effects: Transfers all the elements of list x to this list, before the + //! the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear in distance(begin(), p), and linear in x.size(). + //! + //! Note: Iterators of values obtained from list x now point to elements of + //! this list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, slist& x) + { this->splice_after(this->previous(p), x); } + + //! Requires: p must point to an element contained + //! by the list. x != *this + //! + //! Effects: Transfers all the elements of list x to this list, before the + //! the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear in distance(begin(), p), and linear in x.size(). + //! + //! Note: Iterators of values obtained from list x now point to elements of + //! this list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, BOOST_RV_REF(slist) x) + { this->splice(p, static_cast(x)); } + + //! Requires: p must point to an element contained + //! by this list. i must point to an element contained in list x. + //! + //! Effects: Transfers the value pointed by i, from list x to this list, + //! before the the element pointed by p. No destructors or copy constructors are called. + //! If p == i or p == ++i, this function is a null operation. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear in distance(begin(), p), and in distance(x.begin(), i). + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, slist& x, const_iterator i) + { this->splice_after(this->previous(p), x, this->previous(i)); } + + //! Requires: p must point to an element contained + //! by this list. i must point to an element contained in list x. + //! + //! Effects: Transfers the value pointed by i, from list x to this list, + //! before the the element pointed by p. No destructors or copy constructors are called. + //! If p == i or p == ++i, this function is a null operation. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear in distance(begin(), p), and in distance(x.begin(), i). + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator i) + { this->splice(p, static_cast(x), i); } + + //! Requires: p must point to an element contained + //! by this list. first and last must point to elements contained in list x. + //! + //! Effects: Transfers the range pointed by first and last from list x to this list, + //! before the the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear in distance(begin(), p), in distance(x.begin(), first), + //! and in distance(first, last). + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, slist& x, const_iterator first, const_iterator last) + { this->splice_after(this->previous(p), x, this->previous(first), this->previous(last)); } + + //! Requires: p must point to an element contained + //! by this list. first and last must point to elements contained in list x. + //! + //! Effects: Transfers the range pointed by first and last from list x to this list, + //! before the the element pointed by p. No destructors or copy constructors are called. + //! + //! Throws: std::runtime_error if this' allocator and x's allocator + //! are not equal. + //! + //! Complexity: Linear in distance(begin(), p), in distance(x.begin(), first), + //! and in distance(first, last). + //! + //! Note: Iterators of values obtained from list x now point to elements of this + //! list. Iterators of this list and all the references are not invalidated. + void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator first, const_iterator last) + { this->splice(p, static_cast(x), first, last); } + + /// @cond + private: + + void priv_push_front (const T &x) + { this->insert(this->cbegin(), x); } + + void priv_push_front (BOOST_RV_REF(T) x) + { this->insert(this->cbegin(), ::boost::move(x)); } + + bool priv_try_shrink(size_type new_size, const_iterator &last_pos) { - for (; beg != end; ++beg){ - this->icont().insert_after(prev.get(), *this->create_node_from_it(beg)); - ++prev; + typename Icont::iterator end_n(this->icont().end()), cur(this->icont().before_begin()), cur_next; + while (++(cur_next = cur) != end_n && new_size > 0){ + --new_size; + cur = cur_next; + } + last_pos = const_iterator(cur); + if (cur_next != end_n){ + this->erase_after(last_pos, const_iterator(end_n)); + return true; + } + else{ + return false; } } - template - void priv_create_and_insert_nodes - (const_iterator prev, InpIterator beg, InpIterator end, allocator_v2, std::input_iterator_tag) - { //Just forward to the default one - priv_create_and_insert_nodes(prev, beg, end, allocator_v1(), std::input_iterator_tag()); - } + template + iterator priv_insert(const_iterator p, BOOST_FWD_REF(U) x) + { return this->insert_after(previous(p), ::boost::forward(x)); } + + template + iterator priv_insert_after(const_iterator prev_pos, BOOST_FWD_REF(U) x) + { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(::boost::forward(x)))); } class insertion_functor; friend class insertion_functor; @@ -1320,97 +1557,25 @@ class slist class insertion_functor { Icont &icont_; - typename Icont::const_iterator prev_; + typedef typename Icont::iterator iiterator; + typedef typename Icont::const_iterator iconst_iterator; + const iconst_iterator prev_; + iiterator ret_; public: insertion_functor(Icont &icont, typename Icont::const_iterator prev) - : icont_(icont), prev_(prev) + : icont_(icont), prev_(prev), ret_(prev.unconst()) {} void operator()(Node &n) - { prev_ = this->icont_.insert_after(prev_, n); } + { + ret_ = this->icont_.insert_after(prev_, n); + } + + iiterator inserted_first() const + { return ret_; } }; - template - void priv_create_and_insert_nodes - (const_iterator prev, FwdIterator beg, FwdIterator end, allocator_v2, std::forward_iterator_tag) - { - //Optimized allocation and construction - this->allocate_many_and_construct - (beg, std::distance(beg, end), insertion_functor(this->icont(), prev.get())); - } - - //Default constructed version - void priv_create_and_insert_nodes(const_iterator prev, size_type n) - { - typedef default_construct_iterator default_iterator; - this->priv_create_and_insert_nodes(prev, default_iterator(n), default_iterator()); - } - - //Copy constructed version - void priv_create_and_insert_nodes(const_iterator prev, size_type n, const T& x) - { - typedef constant_iterator cvalue_iterator; - this->priv_create_and_insert_nodes(prev, cvalue_iterator(x, n), cvalue_iterator()); - } - - //Dispatch to detect iterator range or integer overloads - template - void priv_insert_dispatch(const_iterator prev, - InputIter first, InputIter last, - container_detail::false_) - { this->priv_create_and_insert_nodes(prev, first, last); } - - template - void priv_insert_dispatch(const_iterator prev, Integer n, Integer x, container_detail::true_) - { this->priv_create_and_insert_nodes(prev, (size_type)n, x); } - - void priv_fill_assign(size_type n, const T& val) - { - iterator end_n(this->end()); - iterator prev(this->before_begin()); - iterator node(this->begin()); - for ( ; node != end_n && n > 0 ; --n){ - *node = val; - prev = node; - ++node; - } - if (n > 0) - this->priv_create_and_insert_nodes(prev, n, val); - else - this->erase_after(prev, end_n); - } - - template - void priv_assign_dispatch(Int n, Int val, container_detail::true_) - { this->priv_fill_assign((size_type) n, (T)val); } - - template - void priv_assign_dispatch(InpIt first, InpIt last, container_detail::false_) - { - iterator end_n(this->end()); - iterator prev(this->before_begin()); - iterator node(this->begin()); - while (node != end_n && first != last){ - *node = *first; - prev = node; - ++node; - ++first; - } - if (first != last) - this->priv_create_and_insert_nodes(prev, first, last); - else - this->erase_after(prev, end_n); - } - - template - void priv_insert_after_range_dispatch(const_iterator prev_pos, Int n, Int x, container_detail::true_) - { this->priv_create_and_insert_nodes(prev_pos, (size_type)n, x); } - - template - void priv_insert_after_range_dispatch(const_iterator prev_pos, InIter first, InIter last, container_detail::false_) - { this->priv_create_and_insert_nodes(prev_pos, first, last); } - //Functors for member algorithm defaults struct value_less { @@ -1437,14 +1602,14 @@ class slist /// @endcond }; -template +template inline bool -operator==(const slist& x, const slist& y) +operator==(const slist& x, const slist& y) { if(x.size() != y.size()){ return false; } - typedef typename slist::const_iterator const_iterator; + typedef typename slist::const_iterator const_iterator; const_iterator end1 = x.end(); const_iterator i1 = x.begin(); @@ -1456,36 +1621,36 @@ operator==(const slist& x, const slist& y) return i1 == end1; } -template +template inline bool -operator<(const slist& sL1, const slist& sL2) +operator<(const slist& sL1, const slist& sL2) { return std::lexicographical_compare (sL1.begin(), sL1.end(), sL2.begin(), sL2.end()); } -template +template inline bool -operator!=(const slist& sL1, const slist& sL2) +operator!=(const slist& sL1, const slist& sL2) { return !(sL1 == sL2); } -template +template inline bool -operator>(const slist& sL1, const slist& sL2) +operator>(const slist& sL1, const slist& sL2) { return sL2 < sL1; } -template +template inline bool -operator<=(const slist& sL1, const slist& sL2) +operator<=(const slist& sL1, const slist& sL2) { return !(sL2 < sL1); } -template +template inline bool -operator>=(const slist& sL1, const slist& sL2) +operator>=(const slist& sL1, const slist& sL2) { return !(sL1 < sL2); } -template -inline void swap(slist& x, slist& y) +template +inline void swap(slist& x, slist& y) { x.swap(y); } }} @@ -1496,10 +1661,10 @@ namespace boost { /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value; }; */ namespace container { @@ -1517,11 +1682,11 @@ namespace container { //there is no other way namespace std { -template -class insert_iterator > +template +class insert_iterator > { protected: - typedef boost::container::slist Container; + typedef boost::container::slist Container; Container* container; typename Container::iterator iter; public: @@ -1554,4 +1719,4 @@ class insert_iterator > #include -#endif /* BOOST_CONTAINER_SLIST_HPP */ +#endif // BOOST_CONTAINER_SLIST_HPP diff --git a/3party/boost/boost/container/stable_vector.hpp b/3party/boost/boost/container/stable_vector.hpp index d91eccd16e..8d2367255c 100644 --- a/3party/boost/boost/container/stable_vector.hpp +++ b/3party/boost/boost/container/stable_vector.hpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -36,10 +37,11 @@ #include #include #include - -#include +#include +#include //max #include #include +#include //placement new ///@cond @@ -47,10 +49,6 @@ //#define STABLE_VECTOR_ENABLE_INVARIANT_CHECKING -#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) -#include -#endif - ///@endcond namespace boost { @@ -60,24 +58,6 @@ namespace container { namespace stable_vector_detail{ -template -struct smart_ptr_type -{ - typedef typename SmartPtr::value_type value_type; - typedef value_type *pointer; - static pointer get (const SmartPtr &smartptr) - { return smartptr.get();} -}; - -template -struct smart_ptr_type -{ - typedef T value_type; - typedef value_type *pointer; - static pointer get (pointer ptr) - { return ptr;} -}; - template class clear_on_destroy { @@ -93,7 +73,7 @@ class clear_on_destroy { if(do_clear_){ c_.clear(); - c_.clear_pool(); + c_.priv_clear_pool(); } } @@ -104,23 +84,40 @@ class clear_on_destroy bool do_clear_; }; -template -struct node_type_base -{ - node_type_base() - {} - void set_pointer(const VoidPtr &p) - { up = p; } +template +struct node; - VoidPtr up; +template +struct node_base +{ + private: + typedef typename boost::intrusive:: + pointer_traits void_ptr_traits; + typedef typename void_ptr_traits:: + template rebind_pointer + ::type node_base_ptr; + typedef typename void_ptr_traits:: + template rebind_pointer + ::type node_base_ptr_ptr; + + public: + node_base(const node_base_ptr_ptr &n) + : up(n) + {} + + node_base() + : up() + {} + + node_base_ptr_ptr up; }; template -struct node_type - : public node_type_base +struct node + : public node_base { private: - node_type(); + node(); public: T value; @@ -135,87 +132,78 @@ class iterator , Pointer , Reference> { - typedef typename boost::intrusive:: - pointer_traits::template - rebind_pointer::type void_ptr; - typedef typename boost::intrusive:: - pointer_traits::template - rebind_pointer::type const_void_ptr; - typedef node_type node_type_t; - typedef typename boost::intrusive:: - pointer_traits::template - rebind_pointer::type node_type_ptr_t; - typedef typename boost::intrusive:: - pointer_traits::template - rebind_pointer::type const_node_type_ptr_t; - typedef typename boost::intrusive:: - pointer_traits::template - rebind_pointer::type void_ptr_ptr; + typedef boost::intrusive:: + pointer_traits ptr_traits; + typedef typename ptr_traits::template + rebind_pointer::type void_ptr; + typedef node node_type; + typedef node_base node_base_type; + typedef typename ptr_traits::template + rebind_pointer::type node_ptr; + typedef boost::intrusive:: + pointer_traits node_ptr_traits; + typedef typename ptr_traits::template + rebind_pointer::type node_base_ptr; + typedef typename ptr_traits::template + rebind_pointer::type node_base_ptr_ptr; + typedef typename ptr_traits::template + rebind_pointer::type friend_iterator_pointer; - friend class iterator::template rebind_pointer::type>; + friend class iterator; public: typedef std::random_access_iterator_tag iterator_category; typedef T value_type; - typedef typename boost::intrusive:: - pointer_traits::difference_type difference_type; + typedef typename ptr_traits::difference_type difference_type; typedef Pointer pointer; typedef Reference reference; iterator() {} - explicit iterator(node_type_ptr_t pn) - : pn(pn) + explicit iterator(node_ptr p) + : pn(p) {} - iterator(const iterator::template rebind_pointer::type>& x) + iterator(const iterator& x) : pn(x.pn) {} - - private: - static node_type_ptr_t node_ptr_cast(const void_ptr &p) - { - return node_type_ptr_t(static_cast(container_detail::to_raw_pointer(p))); - } - static const_node_type_ptr_t node_ptr_cast(const const_void_ptr &p) - { - return const_node_type_ptr_t(static_cast(container_detail::to_raw_pointer(p))); - } + node_ptr &node_pointer() + { return pn; } - static void_ptr_ptr void_ptr_ptr_cast(const void_ptr &p) - { - return void_ptr_ptr(static_cast(container_detail::to_raw_pointer(p))); - } - - reference dereference() const - { return pn->value; } - bool equal(const iterator& x) const - { return pn==x.pn; } - void increment() - { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+1)); } - void decrement() - { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)-1)); } - void advance(difference_type n) - { pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+n)); } - difference_type distance_to(const iterator& x)const - { return void_ptr_ptr_cast(x.pn->up) - void_ptr_ptr_cast(pn->up); } + const node_ptr &node_pointer() const + { return pn; } public: //Pointer like operators - reference operator*() const { return this->dereference(); } - pointer operator->() const { return pointer(&this->dereference()); } + reference operator*() const + { return pn->value; } + + pointer operator->() const + { return ptr_traits::pointer_to(this->operator*()); } //Increment / Decrement - iterator& operator++() - { this->increment(); return *this; } + iterator& operator++() + { + if(node_base_ptr_ptr p = this->pn->up){ + ++p; + this->pn = node_ptr_traits::static_cast_from(*p); + } + return *this; + } iterator operator++(int) { iterator tmp(*this); ++*this; return iterator(tmp); } iterator& operator--() - { this->decrement(); return *this; } + { + if(node_base_ptr_ptr p = this->pn->up){ + --p; + this->pn = node_ptr_traits::static_cast_from(*p); + } + return *this; + } iterator operator--(int) { iterator tmp(*this); --*this; return iterator(tmp); } @@ -229,7 +217,10 @@ class iterator iterator& operator+=(difference_type off) { - pn = node_ptr_cast(*(void_ptr_ptr_cast(pn->up)+off)); + if(node_base_ptr_ptr p = this->pn->up){ + p += off; + this->pn = node_ptr_traits::static_cast_from(*p); + } return *this; } @@ -259,7 +250,7 @@ class iterator friend difference_type operator-(const iterator& left, const iterator& right) { - return void_ptr_ptr_cast(left.pn->up) - void_ptr_ptr_cast(right.pn->up); + return left.pn->up - right.pn->up; } //Comparison operators @@ -270,73 +261,228 @@ class iterator { return l.pn != r.pn; } friend bool operator< (const iterator& l, const iterator& r) - { return void_ptr_ptr_cast(l.pn->up) < void_ptr_ptr_cast(r.pn->up); } + { return l.pn->up < r.pn->up; } friend bool operator<= (const iterator& l, const iterator& r) - { return void_ptr_ptr_cast(l.pn->up) <= void_ptr_ptr_cast(r.pn->up); } + { return l.pn->up <= r.pn->up; } friend bool operator> (const iterator& l, const iterator& r) - { return void_ptr_ptr_cast(l.pn->up) > void_ptr_ptr_cast(r.pn->up); } + { return l.pn->up > r.pn->up; } friend bool operator>= (const iterator& l, const iterator& r) - { return void_ptr_ptr_cast(l.pn->up) >= void_ptr_ptr_cast(r.pn->up); } + { return l.pn->up >= r.pn->up; } - node_type_ptr_t pn; + node_ptr pn; }; -template -struct select_multiallocation_chain +template +struct index_traits { - typedef typename A::multiallocation_chain type; + typedef boost::intrusive:: + pointer_traits + void_ptr_traits; + typedef stable_vector_detail:: + node_base node_base_type; + typedef typename void_ptr_traits::template + rebind_pointer::type node_base_ptr; + typedef typename void_ptr_traits::template + rebind_pointer::type node_base_ptr_ptr; + typedef boost::intrusive:: + pointer_traits node_base_ptr_traits; + typedef boost::intrusive:: + pointer_traits node_base_ptr_ptr_traits; + typedef typename allocator_traits:: + template portable_rebind_alloc + ::type node_base_ptr_allocator; + typedef ::boost::container::vector + index_type; + typedef typename index_type::iterator index_iterator; + typedef typename index_type::const_iterator const_index_iterator; + typedef typename index_type::size_type size_type; + + static const size_type ExtraPointers = 3; + //Stable vector stores metadata at the end of the index (node_base_ptr vector) with additional 3 pointers: + // back() is this->index.back() - ExtraPointers; + // end node index is *(this->index.end() -3) + // Node cache first is *(this->index.end() - 2); + // Node cache last is this->index.back(); + + static node_base_ptr_ptr ptr_to_node_base_ptr(node_base_ptr &n) + { return node_base_ptr_ptr_traits::pointer_to(n); } + + static void fix_up_pointers(index_iterator first, index_iterator last) + { + while(first != last){ + typedef typename index_type::reference node_base_ptr_ref; + node_base_ptr_ref nbp = *first; + nbp->up = index_traits::ptr_to_node_base_ptr(nbp); + ++first; + } + } + + static index_iterator get_fix_up_end(index_type &index) + { return index.end() - (ExtraPointers - 1); } + + static void fix_up_pointers_from(index_type & index, index_iterator first) + { index_traits::fix_up_pointers(first, index_traits::get_fix_up_end(index)); } + + static void readjust_end_node(index_type &index, node_base_type &end_node) + { + if(!index.empty()){ + node_base_ptr &end_node_idx_ref = *(--index_traits::get_fix_up_end(index)); + end_node_idx_ref = node_base_ptr_traits::pointer_to(end_node); + end_node.up = node_base_ptr_ptr_traits::pointer_to(end_node_idx_ref); + } + else{ + end_node.up = node_base_ptr_ptr(); + } + } + + static void initialize_end_node(index_type &index, node_base_type &end_node, const size_type index_capacity_if_empty) + { + if(index.empty()){ + index.reserve(index_capacity_if_empty + ExtraPointers); + index.resize(ExtraPointers); + node_base_ptr &end_node_ref = *index.data(); + end_node_ref = node_base_ptr_traits::pointer_to(end_node); + end_node.up = index_traits::ptr_to_node_base_ptr(end_node_ref); + } + } + + + #ifdef STABLE_VECTOR_ENABLE_INVARIANT_CHECKING + static bool invariants(index_type &index) + { + for( index_iterator it = index.begin() + , it_end = index_traits::get_fix_up_end(index) + ; it != it_end + ; ++it){ + if((*it)->up != index_traits::ptr_to_node_base_ptr(*it)){ + return false; + } + } + return true; + } + #endif //STABLE_VECTOR_ENABLE_INVARIANT_CHECKING }; -template -struct select_multiallocation_chain +template::value> +struct allocator_version_wrapper { - typedef typename boost::intrusive::pointer_traits - ::pointer>:: + typedef ::boost::container::container_detail::integral_constant + alloc_version; + + typedef typename Allocator::multiallocation_chain multiallocation_chain; + + typedef typename boost::container::allocator_traits::pointer pointer; + typedef typename boost::container::allocator_traits::size_type size_type; + + static pointer allocate_one(Allocator &a) + { return a.allocate_one(); } + + static void deallocate_one(Allocator &a, const pointer &p) + { a.deallocate_one(p); } + + static multiallocation_chain allocate_individual(Allocator &a, size_type n) + { return a.allocate_individual(n); } + + static void deallocate_individual(Allocator &a, multiallocation_chain &holder) + { a.deallocate_individual(::boost::move(holder)); } +}; + +template +struct allocator_version_wrapper +{ + typedef ::boost::container::container_detail::integral_constant + alloc_version; + + typedef typename boost::container::allocator_traits::pointer pointer; + typedef typename boost::container::allocator_traits::size_type size_type; + typedef typename boost::container::allocator_traits::value_type value_type; + + typedef typename boost::intrusive::pointer_traits:: template rebind_pointer::type void_ptr; typedef container_detail::basic_multiallocation_chain multialloc_cached_counted; typedef boost::container::container_detail:: transform_multiallocation_chain - < multialloc_cached_counted - , typename allocator_traits::value_type> type; + < multialloc_cached_counted, value_type> multiallocation_chain; + + static pointer allocate_one(Allocator &a) + { return a.allocate(1); } + + static void deallocate_one(Allocator &a, const pointer &p) + { a.deallocate(p, 1); } + + static void deallocate_individual(Allocator &a, multiallocation_chain &holder) + { + while(!holder.empty()){ + a.deallocate(holder.pop_front(), 1); + } + } + + struct allocate_individual_rollback + { + allocate_individual_rollback(Allocator &a, multiallocation_chain &chain) + : mr_a(a), mr_chain(chain) + {} + + ~allocate_individual_rollback() + { + allocator_version_wrapper::deallocate_individual(mr_a, mr_chain); + } + + Allocator &mr_a; + multiallocation_chain &mr_chain; + }; + + static multiallocation_chain allocate_individual(Allocator &a, size_type n) + { + multiallocation_chain m; + multiallocation_chain m_ret; + allocate_individual_rollback rollback(a, m); + while(n--){ + m.push_front(a.allocate(1)); + } + m.swap(m_ret); + return ::boost::move(m_ret); + } }; } //namespace stable_vector_detail #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) -#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) + #if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) -#define STABLE_VECTOR_CHECK_INVARIANT \ -invariant_checker BOOST_JOIN(check_invariant_,__LINE__)(*this); \ -BOOST_JOIN(check_invariant_,__LINE__).touch(); -#else + #define STABLE_VECTOR_CHECK_INVARIANT \ + invariant_checker BOOST_JOIN(check_invariant_,__LINE__)(*this); \ + BOOST_JOIN(check_invariant_,__LINE__).touch(); -#define STABLE_VECTOR_CHECK_INVARIANT + #else //STABLE_VECTOR_ENABLE_INVARIANT_CHECKING -#endif //#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) + #define STABLE_VECTOR_CHECK_INVARIANT + + #endif //#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) #endif //#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) /// @endcond -//! Originally developed by Joaquin M. Lopez Munoz, stable_vector is std::vector +//! Originally developed by Joaquin M. Lopez Munoz, stable_vector is a std::vector //! drop-in replacement implemented as a node container, offering iterator and reference //! stability. //! -//! More details taken the author's blog: +//! Here are the details taken from the author's blog //! ( -//! Introducing stable_vector) +//! Introducing stable_vector): //! //! We present stable_vector, a fully STL-compliant stable container that provides //! most of the features of std::vector except element contiguity. //! //! General properties: stable_vector satisfies all the requirements of a container, //! a reversible container and a sequence and provides all the optional operations -//! present in std::vector. Like std::vector, iterators are random access. +//! present in std::vector. Like std::vector, iterators are random access. //! stable_vector does not provide element contiguity; in exchange for this absence, //! the container is stable, i.e. references and iterators to an element of a stable_vector //! remain valid as long as the element is not erased, and an iterator that has been @@ -353,46 +499,50 @@ BOOST_JOIN(check_invariant_,__LINE__).touch(); //! additional allocation per element. //! //! Exception safety: As stable_vector does not internally copy elements around, some -//! operations provide stronger exception safety guarantees than in std::vector: +//! operations provide stronger exception safety guarantees than in std::vector. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template > +template > #else -template +template #endif class stable_vector { ///@cond - typedef allocator_traits allocator_traits_type; - typedef typename container_detail:: - move_const_ref_type::type insert_const_ref_type; + typedef allocator_traits allocator_traits_type; typedef typename boost::intrusive::pointer_traits :: template rebind_pointer::type void_ptr; - typedef typename boost::intrusive::pointer_traits - ::template - rebind_pointer::type const_void_ptr; - typedef typename boost::intrusive::pointer_traits - ::template - rebind_pointer::type void_ptr_ptr; - typedef typename boost::intrusive::pointer_traits - ::template - rebind_pointer::type const_void_ptr_ptr; - typedef stable_vector_detail::node_type - node_type_t; - typedef typename boost::intrusive::pointer_traits - ::template - rebind_pointer::type node_type_ptr_t; - typedef stable_vector_detail::node_type_base - node_type_base_t; - typedef typename boost::intrusive::pointer_traits - ::template - rebind_pointer::type node_type_base_ptr_t; - typedef ::boost::container::vector::type> impl_type; - typedef typename impl_type::iterator impl_iterator; - typedef typename impl_type::const_iterator const_impl_iterator; + typedef typename allocator_traits_type:: + template portable_rebind_alloc + ::type void_allocator_type; + typedef stable_vector_detail::index_traits + index_traits_type; + typedef typename index_traits_type::node_base_type node_base_type; + typedef typename index_traits_type::node_base_ptr node_base_ptr; + typedef typename index_traits_type:: + node_base_ptr_ptr node_base_ptr_ptr; + typedef typename index_traits_type:: + node_base_ptr_traits node_base_ptr_traits; + typedef typename index_traits_type:: + node_base_ptr_ptr_traits node_base_ptr_ptr_traits; + typedef typename index_traits_type::index_type index_type; + typedef typename index_traits_type::index_iterator index_iterator; + typedef typename index_traits_type:: + const_index_iterator const_index_iterator; + typedef boost::intrusive:: + pointer_traits + ptr_traits; + typedef stable_vector_detail::node node_type; + typedef typename ptr_traits::template + rebind_pointer::type node_ptr; + typedef boost::intrusive:: + pointer_traits node_ptr_traits; + typedef typename ptr_traits::template + rebind_pointer::type const_node_ptr; + typedef boost::intrusive:: + pointer_traits const_node_ptr_traits; + typedef typename node_ptr_traits::reference node_reference; + typedef typename const_node_ptr_traits::reference const_node_reference; typedef ::boost::container::container_detail:: integral_constant allocator_v1; @@ -400,85 +550,75 @@ class stable_vector integral_constant allocator_v2; typedef ::boost::container::container_detail::integral_constant ::value> alloc_version; + version::value> alloc_version; typedef typename allocator_traits_type:: template portable_rebind_alloc - ::type node_allocator_type; + ::type node_allocator_type; - node_type_ptr_t allocate_one() - { return this->allocate_one(alloc_version()); } + typedef stable_vector_detail::allocator_version_wrapper allocator_version_wrapper_t; + typedef typename allocator_version_wrapper_t::multiallocation_chain multiallocation_chain; - template - node_type_ptr_t allocate_one(AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) - { return node_alloc().allocate(1); } + node_ptr allocate_one() + { return allocator_version_wrapper_t::allocate_one(this->priv_node_alloc()); } - template - node_type_ptr_t allocate_one(AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) - { return node_alloc().allocate_one(); } + void deallocate_one(const node_ptr &p) + { allocator_version_wrapper_t::deallocate_one(this->priv_node_alloc(), p); } - void deallocate_one(node_type_ptr_t p) - { return this->deallocate_one(p, alloc_version()); } + multiallocation_chain allocate_individual(typename allocator_traits_type::size_type n) + { return allocator_version_wrapper_t::allocate_individual(this->priv_node_alloc(), n); } - template - void deallocate_one(node_type_ptr_t p, AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) - { node_alloc().deallocate(p, 1); } - - template - void deallocate_one(node_type_ptr_t p, AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) - { node_alloc().deallocate_one(p); } + void deallocate_individual(multiallocation_chain &holder) + { allocator_version_wrapper_t::deallocate_individual(this->priv_node_alloc(), holder); } friend class stable_vector_detail::clear_on_destroy; + typedef stable_vector_detail::iterator + < T + , typename allocator_traits::reference + , typename allocator_traits::pointer> iterator_impl; + typedef stable_vector_detail::iterator + < T + , typename allocator_traits::const_reference + , typename allocator_traits::const_pointer> const_iterator_impl; ///@endcond public: - - // types: - - typedef typename allocator_traits_type::reference reference; - typedef typename allocator_traits_type::const_reference const_reference; - typedef typename allocator_traits_type::pointer pointer; - typedef typename allocator_traits_type::const_pointer const_pointer; - typedef stable_vector_detail::iterator - iterator; - typedef stable_vector_detail::iterator - const_iterator; - typedef typename impl_type::size_type size_type; - typedef typename iterator::difference_type difference_type; - typedef T value_type; - typedef A allocator_type; - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; - typedef node_allocator_type stored_allocator_type; + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// + typedef T value_type; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef node_allocator_type stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator; + typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) const_reverse_iterator; ///@cond private: BOOST_COPYABLE_AND_MOVABLE(stable_vector) - static const size_type ExtraPointers = 3; - //This container stores metadata at the end of the void_ptr vector with additional 3 pointers: - // back() is impl.back() - ExtraPointers; - // end node index is impl.end()[-3] - // Node cache first is impl.end()[-2]; - // Node cache last is *impl.back(); + static const size_type ExtraPointers = index_traits_type::ExtraPointers; - typedef typename stable_vector_detail:: - select_multiallocation_chain - < node_allocator_type - , alloc_version::value - >::type multiallocation_chain; + class insert_rollback; + friend class insert_rollback; + + class push_back_rollback; + friend class push_back_rollback; ///@endcond + public: + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Default constructs a stable_vector. //! @@ -486,7 +626,7 @@ class stable_vector //! //! Complexity: Constant. stable_vector() - : internal_data(), impl() + : internal_data(), index() { STABLE_VECTOR_CHECK_INVARIANT; } @@ -497,7 +637,7 @@ class stable_vector //! //! Complexity: Constant. explicit stable_vector(const allocator_type& al) - : internal_data(al),impl(al) + : internal_data(al), index(al) { STABLE_VECTOR_CHECK_INVARIANT; } @@ -510,7 +650,7 @@ class stable_vector //! //! Complexity: Linear to n. explicit stable_vector(size_type n) - : internal_data(),impl() + : internal_data(), index() { stable_vector_detail::clear_on_destroy cod(*this); this->resize(n); @@ -526,10 +666,10 @@ class stable_vector //! //! Complexity: Linear to n. stable_vector(size_type n, const T& t, const allocator_type& al = allocator_type()) - : internal_data(al),impl(al) + : internal_data(al), index(al) { stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), n, t); + this->insert(this->cend(), n, t); STABLE_VECTOR_CHECK_INVARIANT; cod.release(); } @@ -543,10 +683,10 @@ class stable_vector //! Complexity: Linear to the range [first, last). template stable_vector(InputIterator first,InputIterator last, const allocator_type& al = allocator_type()) - : internal_data(al),impl(al) + : internal_data(al), index(al) { stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), first, last); + this->insert(this->cend(), first, last); STABLE_VECTOR_CHECK_INVARIANT; cod.release(); } @@ -558,12 +698,12 @@ class stable_vector //! Complexity: Linear to the elements x contains. stable_vector(const stable_vector& x) : internal_data(allocator_traits:: - select_on_container_copy_construction(x.node_alloc())) - , impl(allocator_traits:: - select_on_container_copy_construction(x.impl.get_stored_allocator())) + select_on_container_copy_construction(x.priv_node_alloc())) + , index(allocator_traits:: + select_on_container_copy_construction(x.index.get_stored_allocator())) { stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), x.begin(), x.end()); + this->insert(this->cend(), x.begin(), x.end()); STABLE_VECTOR_CHECK_INVARIANT; cod.release(); } @@ -574,7 +714,7 @@ class stable_vector //! //! Complexity: Constant. stable_vector(BOOST_RV_REF(stable_vector) x) - : internal_data(boost::move(x.node_alloc())), impl(boost::move(x.impl)) + : internal_data(boost::move(x.priv_node_alloc())), index(boost::move(x.index)) { this->priv_swap_members(x); } @@ -585,10 +725,10 @@ class stable_vector //! //! Complexity: Linear to the elements x contains. stable_vector(const stable_vector& x, const allocator_type &a) - : internal_data(a), impl(a) + : internal_data(a), index(a) { stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), x.begin(), x.end()); + this->insert(this->cend(), x.begin(), x.end()); STABLE_VECTOR_CHECK_INVARIANT; cod.release(); } @@ -600,14 +740,14 @@ class stable_vector //! //! Complexity: Constant if a == x.get_allocator(), linear otherwise stable_vector(BOOST_RV_REF(stable_vector) x, const allocator_type &a) - : internal_data(a), impl(a) + : internal_data(a), index(a) { - if(this->node_alloc() == x.node_alloc()){ + if(this->priv_node_alloc() == x.priv_node_alloc()){ this->priv_swap_members(x); } else{ stable_vector_detail::clear_on_destroy cod(*this); - this->insert(this->cbegin(), x.begin(), x.end()); + this->insert(this->cend(), x.begin(), x.end()); STABLE_VECTOR_CHECK_INVARIANT; cod.release(); } @@ -622,7 +762,7 @@ class stable_vector ~stable_vector() { this->clear(); - clear_pool(); + this->priv_clear_pool(); } //! Effects: Makes *this contain the same elements as x. @@ -637,16 +777,16 @@ class stable_vector { STABLE_VECTOR_CHECK_INVARIANT; if (&x != this){ - node_allocator_type &this_alloc = this->node_alloc(); - const node_allocator_type &x_alloc = x.node_alloc(); + node_allocator_type &this_alloc = this->priv_node_alloc(); + const node_allocator_type &x_alloc = x.priv_node_alloc(); container_detail::bool_ flag; if(flag && this_alloc != x_alloc){ this->clear(); this->shrink_to_fit(); } - container_detail::assign_alloc(this->node_alloc(), x.node_alloc(), flag); - container_detail::assign_alloc(this->impl.get_stored_allocator(), x.impl.get_stored_allocator(), flag); + container_detail::assign_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag); + container_detail::assign_alloc(this->index.get_stored_allocator(), x.index.get_stored_allocator(), flag); this->assign(x.begin(), x.end()); } return *this; @@ -663,22 +803,21 @@ class stable_vector stable_vector& operator=(BOOST_RV_REF(stable_vector) x) { if (&x != this){ - node_allocator_type &this_alloc = this->node_alloc(); - node_allocator_type &x_alloc = x.node_alloc(); + node_allocator_type &this_alloc = this->priv_node_alloc(); + node_allocator_type &x_alloc = x.priv_node_alloc(); //If allocators are equal we can just swap pointers if(this_alloc == x_alloc){ //Destroy objects but retain memory this->clear(); - this->impl = boost::move(x.impl); + this->index = boost::move(x.index); this->priv_swap_members(x); //Move allocator if needed container_detail::bool_ flag; - container_detail::move_alloc(this->node_alloc(), x.node_alloc(), flag); + container_detail::move_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag); } //If unequal allocators, then do a one by one move else{ - typedef typename std::iterator_traits::iterator_category ItCat; this->assign( boost::make_move_iterator(x.begin()) , boost::make_move_iterator(x.end())); } @@ -686,6 +825,18 @@ class stable_vector return *this; } + + //! Effects: Assigns the n copies of val to *this. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + void assign(size_type n, const T& t) + { + typedef constant_iterator cvalue_iterator; + this->assign(cvalue_iterator(t, n), cvalue_iterator()); + } + //! Effects: Assigns the the range [first, last) to *this. //! //! Throws: If memory allocation throws or @@ -693,21 +844,25 @@ class stable_vector //! //! Complexity: Linear to n. template - void assign(InputIterator first,InputIterator last) + void assign(InputIterator first,InputIterator last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + >::type * = 0 + #endif + ) { - assign_dispatch(first, last, boost::is_integral()); - } - - - //! Effects: Assigns the n copies of val to *this. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n. - void assign(size_type n,const T& t) - { - typedef constant_iterator cvalue_iterator; - return assign_dispatch(cvalue_iterator(t, n), cvalue_iterator(), boost::mpl::false_()); + STABLE_VECTOR_CHECK_INVARIANT; + iterator first1 = this->begin(); + iterator last1 = this->end(); + for ( ; first1 != last1 && first != last; ++first1, ++first) + *first1 = *first; + if (first == last){ + this->erase(first1, last1); + } + else{ + this->insert(last1, first, last); + } } //! Effects: Returns a copy of the internal allocator. @@ -715,7 +870,8 @@ class stable_vector //! Throws: If allocator's copy constructor throws. //! //! Complexity: Constant. - allocator_type get_allocator()const {return this->node_alloc();} + allocator_type get_allocator() const + { return this->priv_node_alloc(); } //! Effects: Returns a reference to the internal allocator. //! @@ -725,7 +881,7 @@ class stable_vector //! //! Note: Non-standard extension. const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT - { return node_alloc(); } + { return this->priv_node_alloc(); } //! Effects: Returns a reference to the internal allocator. //! @@ -735,8 +891,13 @@ class stable_vector //! //! Note: Non-standard extension. stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT - { return node_alloc(); } + { return this->priv_node_alloc(); } + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// //! Effects: Returns an iterator to the first element contained in the stable_vector. //! @@ -744,7 +905,7 @@ class stable_vector //! //! Complexity: Constant. iterator begin() - { return (impl.empty()) ? end(): iterator(node_ptr_cast(impl.front())) ; } + { return (this->index.empty()) ? this->end(): iterator(node_ptr_traits::static_cast_from(this->index.front())); } //! Effects: Returns a const_iterator to the first element contained in the stable_vector. //! @@ -752,21 +913,23 @@ class stable_vector //! //! Complexity: Constant. const_iterator begin()const - { return (impl.empty()) ? cend() : const_iterator(node_ptr_cast(impl.front())) ; } + { return (this->index.empty()) ? this->cend() : const_iterator(node_ptr_traits::static_cast_from(this->index.front())) ; } //! Effects: Returns an iterator to the end of the stable_vector. //! //! Throws: Nothing. //! //! Complexity: Constant. - iterator end() {return iterator(get_end_node());} + iterator end() + { return iterator(this->priv_get_end_node()); } //! Effects: Returns a const_iterator to the end of the stable_vector. //! //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator end()const {return const_iterator(get_end_node());} + const_iterator end() const + { return const_iterator(this->priv_get_end_node()); } //! Effects: Returns a reverse_iterator pointing to the beginning //! of the reversed stable_vector. @@ -774,7 +937,8 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - reverse_iterator rbegin() {return reverse_iterator(this->end());} + reverse_iterator rbegin() + { return reverse_iterator(this->end()); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed stable_vector. @@ -782,7 +946,8 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator rbegin()const {return const_reverse_iterator(this->end());} + const_reverse_iterator rbegin() const + { return const_reverse_iterator(this->end()); } //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed stable_vector. @@ -790,7 +955,8 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - reverse_iterator rend() {return reverse_iterator(this->begin());} + reverse_iterator rend() + { return reverse_iterator(this->begin()); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed stable_vector. @@ -798,21 +964,24 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator rend()const {return const_reverse_iterator(this->begin());} + const_reverse_iterator rend()const + { return const_reverse_iterator(this->begin()); } //! Effects: Returns a const_iterator to the first element contained in the stable_vector. //! //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator cbegin()const {return this->begin();} + const_iterator cbegin() const + { return this->begin(); } //! Effects: Returns a const_iterator to the end of the stable_vector. //! //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator cend()const {return this->end();} + const_iterator cend()const + { return this->end(); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed stable_vector. @@ -820,7 +989,8 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator crbegin()const{return this->rbegin();} + const_reverse_iterator crbegin() const + { return this->rbegin(); } //! Effects: Returns a const_reverse_iterator pointing to the end //! of the reversed stable_vector. @@ -828,41 +998,14 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator crend()const {return this->rend();} + const_reverse_iterator crend()const + { return this->rend(); } - //! Effects: Returns the number of the elements contained in the stable_vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type size() const - { return impl.empty() ? 0 : (impl.size() - ExtraPointers); } - - //! Effects: Returns the largest possible size of the stable_vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type max_size() const - { return impl.max_size() - ExtraPointers; } - - //! Effects: Number of elements for which memory has been allocated. - //! capacity() is always greater than or equal to size(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type capacity() const - { - if(!impl.capacity()){ - return 0; - } - else{ - const size_type num_nodes = this->impl.size() + this->internal_data.pool_size; - const size_type num_buck = this->impl.capacity(); - return (num_nodes < num_buck) ? num_nodes : num_buck; - } - } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// //! Effects: Returns true if the stable_vector contains no elements. //! @@ -870,23 +1013,27 @@ class stable_vector //! //! Complexity: Constant. bool empty() const - { return impl.empty() || impl.size() == ExtraPointers; } + { return this->index.size() <= ExtraPointers; } - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are copy constructed from x. + //! Effects: Returns the number of the elements contained in the stable_vector. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Throws: Nothing. //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type n, const T& t) + //! Complexity: Constant. + size_type size() const { - STABLE_VECTOR_CHECK_INVARIANT; - if(n > size()) - this->insert(this->cend(), n - this->size(), t); - else if(n < this->size()) - this->erase(this->cbegin() + n, this->cend()); + const size_type index_size = this->index.size(); + return index_size ? (index_size - ExtraPointers) : 0; } + //! Effects: Returns the largest possible size of the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type max_size() const + { return this->index.max_size() - ExtraPointers; } + //! Effects: Inserts or erases elements at the end such that //! the size becomes n. New elements are default constructed. //! @@ -897,12 +1044,44 @@ class stable_vector { typedef default_construct_iterator default_iterator; STABLE_VECTOR_CHECK_INVARIANT; - if(n > size()) + if(n > this->size()) this->insert(this->cend(), default_iterator(n - this->size()), default_iterator()); else if(n < this->size()) this->erase(this->cbegin() + n, this->cend()); } + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type n, const T& t) + { + STABLE_VECTOR_CHECK_INVARIANT; + if(n > this->size()) + this->insert(this->cend(), n - this->size(), t); + else if(n < this->size()) + this->erase(this->cbegin() + n, this->cend()); + } + + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type capacity() const + { + const size_type index_size = this->index.size(); + BOOST_ASSERT(!index_size || index_size >= ExtraPointers); + const size_type bucket_extra_capacity = this->index.capacity()- index_size; + const size_type node_extra_capacity = this->internal_data.pool_size; + const size_type extra_capacity = (bucket_extra_capacity < node_extra_capacity) + ? bucket_extra_capacity : node_extra_capacity; + return (index_size ? (index_size - ExtraPointers + extra_capacity) : index_size); + } + //! Effects: If n is less than or equal to capacity(), this call has no //! effect. Otherwise, it is a request for allocation of additional memory. //! If the request is successful, then capacity() is greater than or equal to @@ -915,24 +1094,104 @@ class stable_vector if(n > this->max_size()) throw std::bad_alloc(); - size_type size = this->size(); + size_type size_ = this->size(); size_type old_capacity = this->capacity(); if(n > old_capacity){ - this->initialize_end_node(n); - const void * old_ptr = &impl[0]; - impl.reserve(n + ExtraPointers); - bool realloced = &impl[0] != old_ptr; + index_traits_type::initialize_end_node(this->index, this->internal_data.end_node, n); + const void * old_ptr = &index[0]; + this->index.reserve(n + ExtraPointers); + bool realloced = &index[0] != old_ptr; //Fix the pointers for the newly allocated buffer if(realloced){ - this->align_nodes(impl.begin(), impl.begin()+size+1); + index_traits_type::fix_up_pointers_from(this->index, this->index.begin()); } //Now fill pool if data is not enough - if((n - size) > this->internal_data.pool_size){ - this->add_to_pool((n - size) - this->internal_data.pool_size); + if((n - size_) > this->internal_data.pool_size){ + this->priv_increase_pool((n - size_) - this->internal_data.pool_size); } } } + //! Effects: Tries to deallocate the excess of memory created + //! with previous allocations. The size of the stable_vector is unchanged + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { + if(this->capacity()){ + //First empty allocated node pool + this->priv_clear_pool(); + //If empty completely destroy the index, let's recover default-constructed state + if(this->empty()){ + this->index.clear(); + this->index.shrink_to_fit(); + this->internal_data.end_node.up = node_base_ptr_ptr(); + } + //Otherwise, try to shrink-to-fit the index and readjust pointers if necessary + else{ + const void* old_ptr = &index[0]; + this->index.shrink_to_fit(); + bool realloced = &index[0] != old_ptr; + //Fix the pointers for the newly allocated buffer + if(realloced){ + index_traits_type::fix_up_pointers_from(this->index, this->index.begin()); + } + } + } + } + + ////////////////////////////////////////////// + // + // element access + // + ////////////////////////////////////////////// + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the first + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference front() + { return static_cast(*this->index.front()).value; } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the first + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference front() const + { return static_cast(*this->index.front()).value; } + + //! Requires: !empty() + //! + //! Effects: Returns a reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + reference back() + { return static_cast(*this->index[this->size() - ExtraPointers]).value; } + + //! Requires: !empty() + //! + //! Effects: Returns a const reference to the last + //! element of the container. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + const_reference back()const + { return static_cast(*this->index[this->size() - ExtraPointers]).value; } + //! Requires: size() > n. //! //! Effects: Returns a reference to the nth element @@ -941,7 +1200,8 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - reference operator[](size_type n){return value(impl[n]);} + reference operator[](size_type n) + { return static_cast(*this->index[n]).value; } //! Requires: size() > n. //! @@ -951,7 +1211,8 @@ class stable_vector //! Throws: Nothing. //! //! Complexity: Constant. - const_reference operator[](size_type n)const{return value(impl[n]);} + const_reference operator[](size_type n)const + { return static_cast(*this->index[n]).value; } //! Requires: size() > n. //! @@ -963,7 +1224,7 @@ class stable_vector //! Complexity: Constant. reference at(size_type n) { - if(n>=size()) + if(n>=this->size()) throw std::out_of_range("invalid subscript at stable_vector::at"); return operator[](n); } @@ -978,158 +1239,16 @@ class stable_vector //! Complexity: Constant. const_reference at(size_type n)const { - if(n>=size()) + if(n>=this->size()) throw std::out_of_range("invalid subscript at stable_vector::at"); return operator[](n); } - //! Requires: !empty() - //! - //! Effects: Returns a reference to the first - //! element of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reference front() - { return value(impl.front()); } - - //! Requires: !empty() - //! - //! Effects: Returns a const reference to the first - //! element of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reference front()const - { return value(impl.front()); } - - //! Requires: !empty() - //! - //! Effects: Returns a reference to the last - //! element of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - reference back() - { return value(*(&impl.back() - ExtraPointers)); } - - //! Requires: !empty() - //! - //! Effects: Returns a const reference to the last - //! element of the container. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_reference back()const - { return value(*(&impl.back() - ExtraPointers)); } - - //! Effects: Inserts a copy of x at the end of the stable_vector. - //! - //! Throws: If memory allocation throws or - //! T's copy constructor throws. - //! - //! Complexity: Amortized constant time. - void push_back(insert_const_ref_type x) - { return priv_push_back(x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - void push_back(T &x) { push_back(const_cast(x)); } - - template - void push_back(const U &u, typename container_detail::enable_if_c - ::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return priv_push_back(u); } - #endif - - //! Effects: Constructs a new element in the end of the stable_vector - //! and moves the resources of mx to this new element. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Amortized constant time. - void push_back(BOOST_RV_REF(T) t) - { this->insert(end(), boost::move(t)); } - - //! Effects: Removes the last element from the stable_vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant time. - void pop_back() - { this->erase(this->end()-1); } - - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Insert a copy of x before position. - //! - //! Throws: If memory allocation throws or x's copy constructor throws. - //! - //! Complexity: If position is end(), amortized constant time - //! Linear time otherwise. - iterator insert(const_iterator position, insert_const_ref_type x) - { return this->priv_insert(position, x); } - - #if defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - iterator insert(const_iterator position, T &x) { return this->insert(position, const_cast(x)); } - - template - iterator insert(const_iterator position, const U &u, typename container_detail::enable_if_c - ::value && !::boost::has_move_emulation_enabled::value >::type* =0) - { return this->priv_insert(position, u); } - #endif - - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Insert a new element before position with mx's resources. - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: If position is end(), amortized constant time - //! Linear time otherwise. - iterator insert(const_iterator position, BOOST_RV_REF(T) x) - { - typedef repeat_iterator repeat_it; - typedef boost::move_iterator repeat_move_it; - //Just call more general insert(pos, size, value) and return iterator - size_type pos_n = position - cbegin(); - this->insert(position - ,repeat_move_it(repeat_it(x, 1)) - ,repeat_move_it(repeat_it())); - return iterator(this->begin() + pos_n); - } - - //! Requires: pos must be a valid iterator of *this. - //! - //! Effects: Insert n copies of x before pos. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n. - void insert(const_iterator position, size_type n, const T& t) - { - STABLE_VECTOR_CHECK_INVARIANT; - this->insert_not_iter(position, n, t); - } - - //! Requires: pos must be a valid iterator of *this. - //! - //! Effects: Insert a copy of the [first, last) range before pos. - //! - //! Throws: If memory allocation throws, T's constructor from a - //! dereferenced InpIt throws or T's copy constructor throws. - //! - //! Complexity: Linear to std::distance [first, last). - template - void insert(const_iterator position,InputIterator first, InputIterator last) - { - STABLE_VECTOR_CHECK_INVARIANT; - this->insert_iter(position,first,last, - boost::mpl::not_ >()); - } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -1206,6 +1325,147 @@ class stable_vector #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts a copy of x at the end of the stable_vector. + //! + //! Throws: If memory allocation throws or + //! T's copy constructor throws. + //! + //! Complexity: Amortized constant time. + void push_back(const T &x); + + //! Effects: Constructs a new element in the end of the stable_vector + //! and moves the resources of mx to this new element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: Amortized constant time. + void push_back(T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) + #endif + + #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a copy of x before position. + //! + //! Returns: An iterator to the inserted element. + //! + //! Throws: If memory allocation throws or x's copy constructor throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, const T &x); + + //! Requires: position must be a valid iterator of *this. + //! + //! Effects: Insert a new element before position with mx's resources. + //! + //! Returns: an iterator to the inserted element. + //! + //! Throws: If memory allocation throws. + //! + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + iterator insert(const_iterator position, T &&x); + #else + BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) + #endif + + //! Requires: pos must be a valid iterator of *this. + //! + //! Effects: Insert n copies of x before position. + //! + //! Returns: an iterator to the first inserted element or position if n is 0. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + iterator insert(const_iterator position, size_type n, const T& t) + { + STABLE_VECTOR_CHECK_INVARIANT; + typedef constant_iterator cvalue_iterator; + return this->insert(position, cvalue_iterator(t, n), cvalue_iterator()); + } + + //! Requires: pos must be a valid iterator of *this. + //! + //! Effects: Insert a copy of the [first, last) range before pos. + //! + //! Returns: an iterator to the first inserted element or position if first == last. + //! + //! Throws: If memory allocation throws, T's constructor from a + //! dereferenced InpIt throws or T's copy constructor throws. + //! + //! Complexity: Linear to std::distance [first, last). + template + iterator insert(const_iterator position,InputIterator first, InputIterator last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) + { + STABLE_VECTOR_CHECK_INVARIANT; + const size_type pos_n = position - this->cbegin(); + for(; first != last; ++first){ + this->emplace(position, *first); + } + return this->begin() + pos_n; + } + + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + iterator insert(const_iterator position, FwdIt first, FwdIt last + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !container_detail::is_input_iterator::value + >::type * = 0 + ) + { + const size_type num_new = (size_type)std::distance(first,last); + const size_type pos = static_cast(position - this->cbegin()); + if(num_new){ + //Fills the node pool and inserts num_new null pointers in pos. + //If a new buffer was needed fixes up pointers up to pos so + //past-new nodes are not aligned until the end of this function + //or in a rollback in case of exception + index_iterator it_past_newly_constructed(this->priv_insert_forward_non_templated(pos, num_new)); + const index_iterator it_past_new(it_past_newly_constructed + num_new); + { + //Prepare rollback + insert_rollback rollback(*this, it_past_newly_constructed, it_past_new); + while(first != last){ + const node_ptr p = this->priv_get_from_pool(); + BOOST_ASSERT(!!p); + //Put it in the index so rollback can return it in pool if construct_in_place throws + *it_past_newly_constructed = p; + //Constructs and fixes up pointers This can throw + this->priv_build_node_from_it(p, it_past_newly_constructed, first); + ++first; + ++it_past_newly_constructed; + } + //rollback.~insert_rollback() called in case of exception + } + //Fix up pointers for past-new nodes (new nodes were fixed during construction) and + //nodes before insertion position in priv_insert_forward_non_templated(...) + index_traits_type::fix_up_pointers_from(this->index, it_past_newly_constructed); + } + return this->begin() + pos; + } + #endif + + //! Effects: Removes the last element from the stable_vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant time. + void pop_back() + { this->erase(--this->cend()); } + //! Effects: Erases the element at position pos. //! //! Throws: Nothing. @@ -1216,10 +1476,10 @@ class stable_vector { STABLE_VECTOR_CHECK_INVARIANT; difference_type d = position - this->cbegin(); - impl_iterator it = impl.begin() + d; - this->delete_node(*it); - it = impl.erase(it); - this->align_nodes(it, get_last_align()); + index_iterator it = this->index.begin() + d; + this->priv_delete_node(position.node_pointer()); + it = this->index.erase(it); + index_traits_type::fix_up_pointers_from(this->index, it); return this->begin()+d; } @@ -1230,7 +1490,19 @@ class stable_vector //! Complexity: Linear to the distance between first and last //! plus linear to the elements between pos and the last element. iterator erase(const_iterator first, const_iterator last) - { return priv_erase(first, last, alloc_version()); } + { + STABLE_VECTOR_CHECK_INVARIANT; + difference_type d1 = first - this->cbegin(), d2 = last - this->cbegin(); + if(d1 != d2){ + index_iterator it1(this->index.begin() + d1), it2(it1 + (d2 - d1)); + for(index_iterator it = it1; it != it2; ++it){ + this->priv_delete_node(node_ptr_traits::static_cast_from(*it)); + } + const index_iterator e = this->index.erase(it1, it2); + index_traits_type::fix_up_pointers_from(this->index, e); + } + return iterator(this->begin() + d1); + } //! Effects: Swaps the contents of *this and x. //! @@ -1241,9 +1513,9 @@ class stable_vector { STABLE_VECTOR_CHECK_INVARIANT; container_detail::bool_ flag; - container_detail::swap_alloc(this->node_alloc(), x.node_alloc(), flag); + container_detail::swap_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag); //vector's allocator is swapped here - this->impl.swap(x.impl); + this->index.swap(x.index); this->priv_swap_members(x); } @@ -1255,456 +1527,269 @@ class stable_vector void clear() { this->erase(this->cbegin(),this->cend()); } - //! Effects: Tries to deallocate the excess of memory created - //! with previous allocations. The size of the stable_vector is unchanged - //! - //! Throws: If memory allocation throws. - //! - //! Complexity: Linear to size(). - void shrink_to_fit() + /// @cond + + private: + + class insert_rollback { - if(this->capacity()){ - //First empty allocated node pool - this->clear_pool(); - //If empty completely destroy the index, let's recover default-constructed state - if(this->empty()){ - this->impl.clear(); - this->impl.shrink_to_fit(); - this->internal_data.set_end_pointer_to_default_constructed(); - } - //Otherwise, try to shrink-to-fit the index and readjust pointers if necessary - else{ - const size_type size = this->size(); - const void* old_ptr = &impl[0]; - this->impl.shrink_to_fit(); - bool realloced = &impl[0] != old_ptr; - //Fix the pointers for the newly allocated buffer - if(realloced){ - this->align_nodes(impl.begin(), impl.begin()+size+1); - } + public: + + insert_rollback(stable_vector &sv, index_iterator &it_past_constructed, const index_iterator &it_past_new) + : m_sv(sv), m_it_past_constructed(it_past_constructed), m_it_past_new(it_past_new) + {} + + ~insert_rollback() + { + if(m_it_past_constructed != m_it_past_new){ + m_sv.priv_put_in_pool(node_ptr_traits::static_cast_from(*m_it_past_constructed)); + index_iterator e = m_sv.index.erase(m_it_past_constructed, m_it_past_new); + index_traits_type::fix_up_pointers_from(m_sv.index, e); } } + + private: + stable_vector &m_sv; + index_iterator &m_it_past_constructed; + const index_iterator &m_it_past_new; + }; + + class push_back_rollback + { + public: + push_back_rollback(stable_vector &sv, const node_ptr &p) + : m_sv(sv), m_p(p) + {} + + ~push_back_rollback() + { + if(m_p){ + m_sv.priv_put_in_pool(m_p); + } + } + + void release() + { m_p = node_ptr(); } + + private: + stable_vector &m_sv; + node_ptr m_p; + }; + + index_iterator priv_insert_forward_non_templated(size_type pos, size_type num_new) + { + index_traits_type::initialize_end_node(this->index, this->internal_data.end_node, num_new); + + //Now try to fill the pool with new data + if(this->internal_data.pool_size < num_new){ + this->priv_increase_pool(num_new - this->internal_data.pool_size); + } + + //Now try to make room in the vector + const node_base_ptr_ptr old_buffer = this->index.data(); + this->index.insert(this->index.begin() + pos, num_new, node_ptr()); + bool new_buffer = this->index.data() != old_buffer; + + //Fix the pointers for the newly allocated buffer + const index_iterator index_beg = this->index.begin(); + if(new_buffer){ + index_traits_type::fix_up_pointers(index_beg, index_beg + pos); + } + return index_beg + pos; } - /// @cond + bool priv_capacity_bigger_than_size() const + { + return this->index.capacity() > this->index.size() && + this->internal_data.pool_size > 0; + } + + template + void priv_push_back(BOOST_MOVE_CATCH_FWD(U) x) + { + if(this->priv_capacity_bigger_than_size()){ + //Enough memory in the pool and in the index + const node_ptr p = this->priv_get_from_pool(); + BOOST_ASSERT(!!p); + { + push_back_rollback rollback(*this, p); + //This might throw + this->priv_build_node_from_convertible(p, ::boost::forward(x)); + rollback.release(); + } + //This can't throw as there is room for a new elements in the index + index_iterator new_index = this->index.insert(this->index.end() - ExtraPointers, p); + index_traits_type::fix_up_pointers_from(this->index, new_index); + } + else{ + this->insert(this->cend(), ::boost::forward(x)); + } + } iterator priv_insert(const_iterator position, const value_type &t) { typedef constant_iterator cvalue_iterator; - return this->insert_iter(position, cvalue_iterator(t, 1), cvalue_iterator(), std::forward_iterator_tag()); + return this->insert(position, cvalue_iterator(t, 1), cvalue_iterator()); } - void priv_push_back(const value_type &t) - { this->insert(end(), t); } - - template - void clear_pool(AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) + iterator priv_insert(const_iterator position, BOOST_RV_REF(T) x) { - if(!impl.empty() && impl.back()){ - void_ptr &pool_first_ref = impl.end()[-2]; - void_ptr &pool_last_ref = impl.back(); + typedef repeat_iterator repeat_it; + typedef boost::move_iterator repeat_move_it; + //Just call more general insert(pos, size, value) and return iterator + return this->insert(position, repeat_move_it(repeat_it(x, 1)), repeat_move_it(repeat_it())); + } + + void priv_clear_pool() + { + if(!this->index.empty() && this->index.back()){ + node_base_ptr &pool_first_ref = *(this->index.end() - 2); + node_base_ptr &pool_last_ref = this->index.back(); multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, this->internal_data.pool_size); - while(!holder.empty()){ - node_type_ptr_t n = holder.front(); - holder.pop_front(); - this->deallocate_one(n); - } + holder.incorporate_after( holder.before_begin() + , node_ptr_traits::static_cast_from(pool_first_ref) + , node_ptr_traits::static_cast_from(pool_last_ref) + , internal_data.pool_size); + this->deallocate_individual(holder); pool_first_ref = pool_last_ref = 0; this->internal_data.pool_size = 0; } } - template - void clear_pool(AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) + void priv_increase_pool(size_type n) { - if(!impl.empty() && impl.back()){ - void_ptr &pool_first_ref = impl.end()[-2]; - void_ptr &pool_last_ref = impl.back(); - multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); - node_alloc().deallocate_individual(boost::move(holder)); - pool_first_ref = pool_last_ref = 0; - this->internal_data.pool_size = 0; - } - } - - void clear_pool() - { - this->clear_pool(alloc_version()); - } - - void add_to_pool(size_type n) - { - this->add_to_pool(n, alloc_version()); - } - - template - void add_to_pool(size_type n, AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) - { - size_type remaining = n; - while(remaining--){ - this->put_in_pool(this->allocate_one()); - } - } - - template - void add_to_pool(size_type n, AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) - { - void_ptr &pool_first_ref = impl.end()[-2]; - void_ptr &pool_last_ref = impl.back(); + node_base_ptr &pool_first_ref = *(this->index.end() - 2); + node_base_ptr &pool_last_ref = this->index.back(); multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); - //BOOST_STATIC_ASSERT((::boost::has_move_emulation_enabled::value == true)); - multiallocation_chain m (node_alloc().allocate_individual(n)); + holder.incorporate_after( holder.before_begin() + , node_ptr_traits::static_cast_from(pool_first_ref) + , node_ptr_traits::static_cast_from(pool_last_ref) + , internal_data.pool_size); + multiallocation_chain m (this->allocate_individual(n)); holder.splice_after(holder.before_begin(), m, m.before_begin(), m.last(), n); this->internal_data.pool_size += n; - std::pair data(holder.extract_data()); + std::pair data(holder.extract_data()); pool_first_ref = data.first; pool_last_ref = data.second; } - void put_in_pool(node_type_ptr_t p) + void priv_put_in_pool(const node_ptr &p) { - void_ptr &pool_first_ref = impl.end()[-2]; - void_ptr &pool_last_ref = impl.back(); + node_base_ptr &pool_first_ref = *(this->index.end()-2); + node_base_ptr &pool_last_ref = this->index.back(); multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); + holder.incorporate_after( holder.before_begin() + , node_ptr_traits::static_cast_from(pool_first_ref) + , node_ptr_traits::static_cast_from(pool_last_ref) + , internal_data.pool_size); holder.push_front(p); ++this->internal_data.pool_size; - std::pair ret(holder.extract_data()); + std::pair ret(holder.extract_data()); pool_first_ref = ret.first; - pool_last_ref = ret.second; + pool_last_ref = ret.second; } - node_type_ptr_t get_from_pool() + node_ptr priv_get_from_pool() { - if(!impl.back()){ - return node_type_ptr_t(0); + //Precondition: index is not empty + BOOST_ASSERT(!this->index.empty()); + node_base_ptr &pool_first_ref = *(this->index.end() - 2); + node_base_ptr &pool_last_ref = this->index.back(); + multiallocation_chain holder; + holder.incorporate_after( holder.before_begin() + , node_ptr_traits::static_cast_from(pool_first_ref) + , node_ptr_traits::static_cast_from(pool_last_ref) + , internal_data.pool_size); + node_ptr ret = holder.pop_front(); + --this->internal_data.pool_size; + if(!internal_data.pool_size){ + pool_first_ref = pool_last_ref = node_ptr(); } else{ - void_ptr &pool_first_ref = impl.end()[-2]; - void_ptr &pool_last_ref = impl.back(); - multiallocation_chain holder; - holder.incorporate_after(holder.before_begin(), pool_first_ref, pool_last_ref, internal_data.pool_size); - node_type_ptr_t ret = holder.front(); - holder.pop_front(); - --this->internal_data.pool_size; - if(!internal_data.pool_size){ - pool_first_ref = pool_last_ref = void_ptr(0); - } - else{ - std::pair data(holder.extract_data()); - pool_first_ref = data.first; - pool_last_ref = data.second; - } - return ret; + std::pair data(holder.extract_data()); + pool_first_ref = data.first; + pool_last_ref = data.second; } + return ret; } - void insert_iter_prolog(size_type n, difference_type d) + node_ptr priv_get_end_node() const { - initialize_end_node(n); - const void* old_ptr = &impl[0]; - //size_type old_capacity = capacity(); - //size_type old_size = size(); - impl.insert(impl.begin()+d, n, 0); - bool realloced = &impl[0] != old_ptr; - //Fix the pointers for the newly allocated buffer - if(realloced){ - align_nodes(impl.begin(), impl.begin()+d); - } + return node_ptr_traits::pointer_to + (static_cast(const_cast(this->internal_data.end_node))); } - template - void assign_dispatch(InputIterator first, InputIterator last, boost::mpl::false_) + void priv_delete_node(const node_ptr &n) { - STABLE_VECTOR_CHECK_INVARIANT; - iterator first1 = this->begin(); - iterator last1 = this->end(); - for ( ; first1 != last1 && first != last; ++first1, ++first) - *first1 = *first; - if (first == last){ - this->erase(first1, last1); - } - else{ - this->insert(last1, first, last); - } - } - - template - void assign_dispatch(Integer n, Integer t, boost::mpl::true_) - { - typedef constant_iterator cvalue_iterator; - this->assign_dispatch(cvalue_iterator(t, n), cvalue_iterator(), boost::mpl::false_()); - } - - iterator priv_erase(const_iterator first, const_iterator last, allocator_v1) - { - STABLE_VECTOR_CHECK_INVARIANT; - difference_type d1 = first - this->cbegin(), d2 = last - this->cbegin(); - if(d1 != d2){ - impl_iterator it1(impl.begin() + d1), it2(impl.begin() + d2); - for(impl_iterator it = it1; it != it2; ++it) - this->delete_node(*it); - impl_iterator e = impl.erase(it1, it2); - this->align_nodes(e, get_last_align()); - } - return iterator(this->begin() + d1); - } - - impl_iterator get_last_align() - { - return impl.end() - (ExtraPointers - 1); - } - - const_impl_iterator get_last_align() const - { - return impl.cend() - (ExtraPointers - 1); - } - - template - iterator priv_erase(const_iterator first, const_iterator last, AllocatorVersion, - typename boost::container::container_detail::enable_if_c - - ::value>::type * = 0) - { - STABLE_VECTOR_CHECK_INVARIANT; - return priv_erase(first, last, allocator_v1()); - } - - static node_type_ptr_t node_ptr_cast(const void_ptr &p) - { - return node_type_ptr_t(static_cast(container_detail::to_raw_pointer(p))); - } - - static node_type_base_ptr_t node_base_ptr_cast(const void_ptr &p) - { - return node_type_base_ptr_t(static_cast(container_detail::to_raw_pointer(p))); - } - - static value_type& value(const void_ptr &p) - { - return node_ptr_cast(p)->value; - } - - void initialize_end_node(size_type impl_capacity = 0) - { - if(impl.empty()){ - impl.reserve(impl_capacity + ExtraPointers); - impl.resize (ExtraPointers, void_ptr(0)); - impl[0] = &this->internal_data.end_node; - this->internal_data.end_node.up = &impl[0]; - } - } - - void readjust_end_node() - { - if(!this->impl.empty()){ - void_ptr &end_node_ref = *(this->get_last_align()-1); - end_node_ref = this->get_end_node(); - this->internal_data.end_node.up = &end_node_ref; - } - else{ - this->internal_data.end_node.up = void_ptr(&this->internal_data.end_node.up); - } - } - - node_type_ptr_t get_end_node() const - { - const node_type_base_t* cp = &this->internal_data.end_node; - node_type_base_t* p = const_cast(cp); - return node_ptr_cast(p); - } - - template - void_ptr new_node(const void_ptr &up, Iter it) - { - node_type_ptr_t p = this->allocate_one(); - try{ - boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->value), it); - //This does not throw - ::new(static_cast(container_detail::to_raw_pointer(p))) node_type_base_t; - p->set_pointer(up); - } - catch(...){ - this->deallocate_one(p); - throw; - } - return p; - } - - void delete_node(const void_ptr &p) - { - node_type_ptr_t n(node_ptr_cast(p)); allocator_traits:: - destroy(this->node_alloc(), container_detail::to_raw_pointer(n)); - this->put_in_pool(n); + destroy(this->priv_node_alloc(), container_detail::addressof(n->value)); + static_cast(container_detail::to_raw_pointer(n))->~node_base_type(); + this->priv_put_in_pool(n); } - static void align_nodes(impl_iterator first, impl_iterator last) + template + void priv_build_node_from_it(const node_ptr &p, const index_iterator &up_index, const Iterator &it) { - while(first!=last){ - node_ptr_cast(*first)->up = void_ptr(&*first); - ++first; - } + //This can throw + boost::container::construct_in_place + ( this->priv_node_alloc() + , container_detail::addressof(p->value) + , it); + //This does not throw + ::new(static_cast(container_detail::to_raw_pointer(p))) + node_base_type(index_traits_type::ptr_to_node_base_ptr(*up_index)); } - void insert_not_iter(const_iterator position, size_type n, const T& t) + template + void priv_build_node_from_convertible(const node_ptr &p, BOOST_FWD_REF(ValueConvertible) value_convertible) { - typedef constant_iterator cvalue_iterator; - this->insert_iter(position, cvalue_iterator(t, n), cvalue_iterator(), std::forward_iterator_tag()); + //This can throw + boost::container::allocator_traits::construct + ( this->priv_node_alloc() + , container_detail::addressof(p->value) + , ::boost::forward(value_convertible)); + //This does not throw + ::new(static_cast(container_detail::to_raw_pointer(p))) node_base_type; } - template - void insert_iter(const_iterator position,InputIterator first,InputIterator last, boost::mpl::true_) + void priv_swap_members(stable_vector &x) { - typedef typename std::iterator_traits::iterator_category category; - this->insert_iter(position, first, last, category()); - } - - template - void insert_iter(const_iterator position,InputIterator first,InputIterator last,std::input_iterator_tag) - { - for(; first!=last; ++first){ - this->insert(position, *first); - } - } - - template - iterator insert_iter(const_iterator position, InputIterator first, InputIterator last, std::forward_iterator_tag) - { - size_type n = (size_type)std::distance(first,last); - difference_type d = position-this->cbegin(); - if(n){ - this->insert_iter_prolog(n, d); - const impl_iterator it(impl.begin() + d); - this->insert_iter_fwd(it, first, last, n); - //Fix the pointers for the newly allocated buffer - this->align_nodes(it + n, get_last_align()); - } - return this->begin() + d; - } - - template - void insert_iter_fwd_alloc(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n, allocator_v1) - { - size_type i=0; - try{ - while(first!=last){ - it[i] = this->new_node(void_ptr_ptr(&it[i]), first); - ++first; - ++i; - } - } - catch(...){ - impl_iterator e = impl.erase(it + i, it + n); - this->align_nodes(e, get_last_align()); - throw; - } - } - - template - void insert_iter_fwd_alloc(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n, allocator_v2) - { - multiallocation_chain mem(node_alloc().allocate_individual(n)); - - size_type i = 0; - node_type_ptr_t p = 0; - try{ - while(first != last){ - p = mem.front(); - mem.pop_front(); - //This can throw - boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->value), first); - //This does not throw - ::new(static_cast(container_detail::to_raw_pointer(p))) node_type_base_t; - p->set_pointer(void_ptr_ptr(&it[i])); - ++first; - it[i] = p; - ++i; - } - } - catch(...){ - node_alloc().deallocate_one(p); - node_alloc().deallocate_many(boost::move(mem)); - impl_iterator e = impl.erase(it+i, it+n); - this->align_nodes(e, get_last_align()); - throw; - } - } - - template - void insert_iter_fwd(const impl_iterator it, FwdIterator first, FwdIterator last, difference_type n) - { - size_type i = 0; - node_type_ptr_t p = 0; - try{ - while(first != last){ - p = this->get_from_pool(); - if(!p){ - insert_iter_fwd_alloc(it+i, first, last, n-i, alloc_version()); - break; - } - //This can throw - boost::container::construct_in_place(this->node_alloc(), container_detail::addressof(p->value), first); - //This does not throw - ::new(static_cast(container_detail::to_raw_pointer(p))) node_type_base_t; - p->set_pointer(void_ptr_ptr(&it[i])); - ++first; - it[i]=p; - ++i; - } - } - catch(...){ - put_in_pool(p); - impl_iterator e = impl.erase(it+i, it+n); - this->align_nodes(e, get_last_align()); - throw; - } - } - - template - void insert_iter(const_iterator position, InputIterator first, InputIterator last, boost::mpl::false_) - { - this->insert_not_iter(position, first, last); + container_detail::do_swap(this->internal_data.pool_size, x.internal_data.pool_size); + index_traits_type::readjust_end_node(this->index, this->internal_data.end_node); + index_traits_type::readjust_end_node(x.index, x.internal_data.end_node); } #if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING) - bool invariant()const + bool priv_invariant()const { - if(impl.empty()) - return !capacity() && !size(); - if(get_end_node() != *(impl.end() - ExtraPointers)){ + index_type & index_ref = const_cast(this->index); + + if(index.empty()) + return !this->capacity() && !this->size(); + if(this->priv_get_end_node() != *(index.end() - ExtraPointers)){ return false; } - for(const_impl_iterator it = impl.begin(), it_end = get_last_align(); it != it_end; ++it){ - if(const_void_ptr(node_ptr_cast(*it)->up) != - const_void_ptr(const_void_ptr_ptr(&*it))) - return false; + + if(!index_traits_type::invariants(index_ref)){ + return false; } - size_type n = capacity()-size(); - const void_ptr &pool_head = impl.back(); + + size_type n = this->capacity() - this->size(); + node_base_ptr &pool_first_ref = *(index_ref.end() - 2); + node_base_ptr &pool_last_ref = index_ref.back(); + multiallocation_chain holder; + holder.incorporate_after( holder.before_begin() + , node_ptr_traits::static_cast_from(pool_first_ref) + , node_ptr_traits::static_cast_from(pool_last_ref) + , internal_data.pool_size); + typename multiallocation_chain::iterator beg(holder.begin()), end(holder.end()); size_type num_pool = 0; - node_type_ptr_t p = node_ptr_cast(pool_head); - while(p){ + while(beg != end){ ++num_pool; - p = node_ptr_cast(p->up); + ++beg; } - return n >= num_pool; + return n >= num_pool && num_pool == internal_data.pool_size; } class invariant_checker @@ -1715,7 +1800,7 @@ class stable_vector public: invariant_checker(const stable_vector& v):p(&v){} - ~invariant_checker(){BOOST_ASSERT(p->invariant());} + ~invariant_checker(){BOOST_ASSERT(p->priv_invariant());} void touch(){} }; #endif @@ -1725,94 +1810,72 @@ class stable_vector { private: BOOST_MOVABLE_BUT_NOT_COPYABLE(ebo_holder) + public: -/* - explicit ebo_holder(BOOST_RV_REF(ebo_holder) x) - : node_allocator_type(boost::move(static_cast(x))) - , pool_size(0) - , end_node() - {} -*/ template explicit ebo_holder(BOOST_FWD_REF(AllocatorRLValue) a) : node_allocator_type(boost::forward(a)) , pool_size(0) , end_node() - { - this->set_end_pointer_to_default_constructed(); - } + {} ebo_holder() : node_allocator_type() , pool_size(0) , end_node() - { - this->set_end_pointer_to_default_constructed(); - } - - void set_end_pointer_to_default_constructed() - { - end_node.set_pointer(void_ptr(&end_node.up)); - } + {} size_type pool_size; - node_type_base_t end_node; + node_base_type end_node; } internal_data; - void priv_swap_members(stable_vector &x) - { - container_detail::do_swap(this->internal_data.pool_size, x.internal_data.pool_size); - this->readjust_end_node(); - x.readjust_end_node(); - } + node_allocator_type &priv_node_alloc() { return internal_data; } + const node_allocator_type &priv_node_alloc() const { return internal_data; } - node_allocator_type &node_alloc() { return internal_data; } - const node_allocator_type &node_alloc() const { return internal_data; } - - impl_type impl; + index_type index; /// @endcond }; -template -bool operator==(const stable_vector& x,const stable_vector& y) +template +bool operator==(const stable_vector& x,const stable_vector& y) { return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin()); } -template -bool operator< (const stable_vector& x,const stable_vector& y) +template +bool operator< (const stable_vector& x,const stable_vector& y) { return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end()); } -template -bool operator!=(const stable_vector& x,const stable_vector& y) +template +bool operator!=(const stable_vector& x,const stable_vector& y) { return !(x==y); } -template -bool operator> (const stable_vector& x,const stable_vector& y) +template +bool operator> (const stable_vector& x,const stable_vector& y) { return y -bool operator>=(const stable_vector& x,const stable_vector& y) +template +bool operator>=(const stable_vector& x,const stable_vector& y) { return !(x -bool operator<=(const stable_vector& x,const stable_vector& y) +template +bool operator<=(const stable_vector& x,const stable_vector& y) { return !(x>y); } // specialized algorithms: -template -void swap(stable_vector& x,stable_vector& y) +template +void swap(stable_vector& x,stable_vector& y) { x.swap(y); } diff --git a/3party/boost/boost/container/string.hpp b/3party/boost/boost/container/string.hpp index 2a64cec428..7cbd44765e 100644 --- a/3party/boost/boost/container/string.hpp +++ b/3party/boost/boost/container/string.hpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -68,13 +69,8 @@ #include #include -#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED namespace boost { namespace container { -#else -namespace boost { -namespace container { -#endif /// @cond namespace container_detail { @@ -88,19 +84,20 @@ namespace container_detail { // memory. The destructor assumes that the memory either is the internal buffer, // or else points to a block of memory that was allocated using _String_base's // allocator and whose size is this->m_storage. -template +template class basic_string_base { BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_string_base) - typedef allocator_traits allocator_traits_type; + typedef allocator_traits allocator_traits_type; public: - typedef A allocator_type; + typedef Allocator allocator_type; //! The stored allocator type - typedef allocator_type stored_allocator_type; + typedef allocator_type stored_allocator_type; typedef typename allocator_traits_type::pointer pointer; typedef typename allocator_traits_type::value_type value_type; typedef typename allocator_traits_type::size_type size_type; + typedef ::boost::intrusive::pointer_traits pointer_traits; basic_string_base() : members_() @@ -128,10 +125,7 @@ class basic_string_base { if(!this->is_short()){ this->deallocate_block(); - allocator_traits_type::destroy - ( this->alloc() - , static_cast(static_cast(&this->members_.m_repr.r)) - ); + this->is_short(true); } } @@ -203,32 +197,38 @@ class basic_string_base long_raw_t r; short_t s; - short_t &short_repr() const - { return *const_cast(&s); } + const short_t &short_repr() const + { return s; } - long_t &long_repr() const - { return *const_cast(reinterpret_cast(&r)); } + const long_t &long_repr() const + { return *static_cast(static_cast(&r)); } + + short_t &short_repr() + { return s; } + + long_t &long_repr() + { return *static_cast(static_cast(&r)); } }; struct members_holder - : public A + : public Allocator { members_holder() - : A() + : Allocator() {} template explicit members_holder(BOOST_FWD_REF(AllocatorConvertible) a) - : A(boost::forward(a)) + : Allocator(boost::forward(a)) {} repr_t m_repr; } members_; - const A &alloc() const + const Allocator &alloc() const { return members_; } - A &alloc() + Allocator &alloc() { return members_; } static const size_type InternalBufferChars = (sizeof(repr_t) - ShortDataOffset)/sizeof(value_type); @@ -242,20 +242,22 @@ class basic_string_base { return static_cast(this->members_.m_repr.s.h.is_short != 0); } void is_short(bool yes) - { - if(yes && !this->is_short()){ + { + const bool was_short = this->is_short(); + if(yes && !was_short){ allocator_traits_type::destroy ( this->alloc() , static_cast(static_cast(&this->members_.m_repr.r)) ); + this->members_.m_repr.s.h.is_short = true; } - else{ + else if(!yes && was_short){ allocator_traits_type::construct ( this->alloc() , static_cast(static_cast(&this->members_.m_repr.r)) ); + this->members_.m_repr.s.h.is_short = false; } - this->members_.m_repr.s.h.is_short = yes; } private: @@ -270,7 +272,7 @@ class basic_string_base typedef container_detail::integral_constant allocator_v1; typedef container_detail::integral_constant allocator_v2; typedef container_detail::integral_constant::value> alloc_version; + boost::container::container_detail::version::value> alloc_version; std::pair allocation_command(allocation_type command, @@ -279,7 +281,7 @@ class basic_string_base size_type &received_size, pointer reuse = 0) { if(this->is_short() && (command & (expand_fwd | expand_bwd)) ){ - reuse = pointer(0); + reuse = pointer(); command &= ~(expand_fwd | expand_bwd); } return this->allocation_command @@ -297,7 +299,7 @@ class basic_string_base (void)limit_size; (void)reuse; if(!(command & allocate_new)) - return std::pair(pointer(0), false); + return std::pair(pointer(), false); received_size = preferred_size; return std::make_pair(this->alloc().allocate(received_size), false); } @@ -358,7 +360,7 @@ class basic_string_base pointer p = this->allocation_command(allocate_new, n, new_cap, new_cap).first; this->is_short(false); this->priv_long_addr(p); - this->priv_size(0); + this->priv_long_size(0); this->priv_storage(new_cap); } } @@ -384,13 +386,26 @@ class basic_string_base { return this->priv_storage() - 1; } pointer priv_short_addr() const - { return pointer(&this->members_.m_repr.short_repr().data[0]); } + { return pointer_traits::pointer_to(const_cast(this->members_.m_repr.short_repr().data[0])); } pointer priv_long_addr() const { return this->members_.m_repr.long_repr().start; } pointer priv_addr() const - { return this->is_short() ? pointer(&this->members_.m_repr.short_repr().data[0]) : this->members_.m_repr.long_repr().start; } + { + return this->is_short() + ? priv_short_addr() + : priv_long_addr() + ; + } + + pointer priv_end_addr() const + { + return this->is_short() + ? this->priv_short_addr() + this->priv_short_size() + : this->priv_long_addr() + this->priv_long_size() + ; + } void priv_long_addr(pointer addr) { this->members_.m_repr.long_repr().start = addr; } @@ -416,7 +431,7 @@ class basic_string_base } size_type priv_size() const - { return this->is_short() ? priv_short_size() : priv_long_size(); } + { return this->is_short() ? this->priv_short_size() : this->priv_long_size(); } size_type priv_short_size() const { return this->members_.m_repr.short_repr().h.length; } @@ -439,7 +454,7 @@ class basic_string_base void priv_long_size(size_type sz) { - this->members_.m_repr.long_repr().length = static_cast(sz); + this->members_.m_repr.long_repr().length = sz; } void swap_data(basic_string_base& other) @@ -449,16 +464,22 @@ class basic_string_base container_detail::do_swap(this->members_.m_repr, other.members_.m_repr); } else{ - repr_t copied(this->members_.m_repr); - this->members_.m_repr.long_repr() = other.members_.m_repr.long_repr(); - other.members_.m_repr = copied; + short_t short_backup(this->members_.m_repr.short_repr()); + long_t long_backup (other.members_.m_repr.long_repr()); + other.members_.m_repr.long_repr().~long_t(); + ::new(&this->members_.m_repr.long_repr()) long_t; + this->members_.m_repr.long_repr() = long_backup; + other.members_.m_repr.short_repr() = short_backup; } } else{ if(other.is_short()){ - repr_t copied(other.members_.m_repr); - other.members_.m_repr.long_repr() = this->members_.m_repr.long_repr(); - this->members_.m_repr = copied; + short_t short_backup(other.members_.m_repr.short_repr()); + long_t long_backup (this->members_.m_repr.long_repr()); + this->members_.m_repr.long_repr().~long_t(); + ::new(&other.members_.m_repr.long_repr()) long_t; + other.members_.m_repr.long_repr() = long_backup; + this->members_.m_repr.short_repr() = short_backup; } else{ container_detail::do_swap(this->members_.m_repr.long_repr(), other.members_.m_repr.long_repr()); @@ -500,22 +521,22 @@ class basic_string_base //! In this implementation, iterators are only invalidated by member functions that //! explicitly change the string's contents. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template , class A = std::allocator > +template , class Allocator = std::allocator > #else -template +template #endif class basic_string - : private container_detail::basic_string_base + : private container_detail::basic_string_base { /// @cond private: - typedef allocator_traits allocator_traits_type; + typedef allocator_traits allocator_traits_type; BOOST_COPYABLE_AND_MOVABLE(basic_string) - typedef container_detail::basic_string_base base_t; + typedef container_detail::basic_string_base base_t; static const typename base_t::size_type InternalBufferChars = base_t::InternalBufferChars; protected: - // A helper class to use a char_traits as a function object. + // Allocator helper class to use a char_traits as a function object. template struct Eq_traits @@ -550,7 +571,7 @@ class basic_string public: //! The allocator type - typedef A allocator_type; + typedef Allocator allocator_type; //! The stored allocator type typedef allocator_type stored_allocator_type; //! The type of object, CharT, stored in the string @@ -586,6 +607,7 @@ class basic_string typedef typename base_t::allocator_v1 allocator_v1; typedef typename base_t::allocator_v2 allocator_v2; typedef typename base_t::alloc_version alloc_version; + typedef ::boost::intrusive::pointer_traits pointer_traits; /// @endcond public: // Constructor, destructor, assignment. @@ -624,7 +646,10 @@ class basic_string //! Throws: If allocator_type's default constructor throws. basic_string(const basic_string& s) : base_t(allocator_traits_type::select_on_container_copy_construction(s.alloc())) - { this->priv_range_initialize(s.begin(), s.end()); } + { + this->priv_terminate_string(); + this->assign(s.begin(), s.end()); + } //! Effects: Move constructor. Moves s's resources to *this. //! @@ -642,7 +667,10 @@ class basic_string //! Throws: If allocation throws. basic_string(const basic_string& s, const allocator_type &a) : base_t(a) - { this->priv_range_initialize(s.begin(), s.end()); } + { + this->priv_terminate_string(); + this->assign(s.begin(), s.end()); + } //! Effects: Move constructor using the specified allocator. //! Moves s's resources to *this. @@ -653,11 +681,12 @@ class basic_string basic_string(BOOST_RV_REF(basic_string) s, const allocator_type &a) : base_t(a) { + this->priv_terminate_string(); if(a == this->alloc()){ this->swap_data(s); } else{ - this->priv_range_initialize(s.begin(), s.end()); + this->assign(s.begin(), s.end()); } } @@ -667,10 +696,11 @@ class basic_string const allocator_type& a = allocator_type()) : base_t(a) { + this->priv_terminate_string(); if (pos > s.size()) this->throw_out_of_range(); else - this->priv_range_initialize + this->assign (s.begin() + pos, s.begin() + pos + container_detail::min_value(n, s.size() - pos)); } @@ -679,23 +709,29 @@ class basic_string basic_string(const CharT* s, size_type n, const allocator_type& a = allocator_type()) : base_t(a) - { this->priv_range_initialize(s, s + n); } + { + this->priv_terminate_string(); + this->assign(s, s + n); + } //! Effects: Constructs a basic_string taking the allocator as parameter, //! and is initialized by the null-terminated s c-string. basic_string(const CharT* s, const allocator_type& a = allocator_type()) : base_t(a) - { this->priv_range_initialize(s, s + Traits::length(s)); } + { + this->priv_terminate_string(); + this->assign(s, s + Traits::length(s)); + } //! Effects: Constructs a basic_string taking the allocator as parameter, //! and is initialized by n copies of c. basic_string(size_type n, CharT c, const allocator_type& a = allocator_type()) : base_t(a) - { - this->priv_range_initialize(cvalue_iterator(c, n), - cvalue_iterator()); + { + this->priv_terminate_string(); + this->assign(n, c); } //! Effects: Constructs a basic_string taking the allocator as parameter, @@ -705,10 +741,8 @@ class basic_string const allocator_type& a = allocator_type()) : base_t(a) { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_initialize_dispatch(f, l, Result()); + this->priv_terminate_string(); + this->assign(f, l); } //! Effects: Destroys the basic_string. All used memory is deallocated. @@ -735,8 +769,8 @@ class basic_string if(!this->is_short()){ this->deallocate_block(); this->is_short(true); - Traits::assign(*this->priv_addr(), this->priv_null()); - this->priv_size(0); + Traits::assign(*this->priv_addr(), CharT(0)); + this->priv_short_size(0); } } container_detail::assign_alloc(this->alloc(), x.alloc(), flag); @@ -811,7 +845,7 @@ class basic_string //! //! Complexity: Constant. iterator end() - { return this->priv_addr() + this->priv_size(); } + { return this->priv_end_addr(); } //! Effects: Returns a const_iterator to the end of the vector. //! @@ -819,7 +853,7 @@ class basic_string //! //! Complexity: Constant. const_iterator end() const - { return this->priv_addr() + this->priv_size(); } + { return this->priv_end_addr(); } //! Effects: Returns a const_iterator to the end of the vector. //! @@ -827,7 +861,7 @@ class basic_string //! //! Complexity: Constant. const_iterator cend() const - { return this->priv_addr() + this->priv_size(); } + { return this->priv_end_addr(); } //! Effects: Returns a reverse_iterator pointing to the beginning //! of the reversed vector. @@ -836,7 +870,7 @@ class basic_string //! //! Complexity: Constant. reverse_iterator rbegin() - { return reverse_iterator(this->priv_addr() + this->priv_size()); } + { return reverse_iterator(this->priv_end_addr()); } //! Effects: Returns a const_reverse_iterator pointing to the beginning //! of the reversed vector. @@ -854,7 +888,7 @@ class basic_string //! //! Complexity: Constant. const_reverse_iterator crbegin() const - { return const_reverse_iterator(this->priv_addr() + this->priv_size()); } + { return const_reverse_iterator(this->priv_end_addr()); } //! Effects: Returns a reverse_iterator pointing to the end //! of the reversed vector. @@ -898,7 +932,7 @@ class basic_string //! Complexity: Constant. //! //! Note: Non-standard extension. - const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT + stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT { return this->alloc(); } //! Effects: Returns a reference to the internal allocator. @@ -908,7 +942,7 @@ class basic_string //! Complexity: Constant. //! //! Note: Non-standard extension. - stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT + const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT { return this->alloc(); } //! Effects: Returns the number of the elements contained in the vector. @@ -943,7 +977,7 @@ class basic_string //! Complexity: Linear to the difference between size() and new_size. void resize(size_type n, CharT c) { - if (n <= size()) + if (n <= this->size()) this->erase(this->begin() + n, this->end()); else this->append(n - this->size(), c); @@ -956,7 +990,7 @@ class basic_string //! //! Complexity: Linear to the difference between size() and new_size. void resize(size_type n) - { resize(n, this->priv_null()); } + { resize(n, CharT(0)); } //! Effects: If n is less than or equal to capacity(), this call has no //! effect. Otherwise, it is a request for allocation of additional memory. @@ -966,8 +1000,9 @@ class basic_string //! Throws: If memory allocation allocation throws void reserve(size_type res_arg) { - if (res_arg > this->max_size()) + if (res_arg > this->max_size()){ this->throw_length_error(); + } if (this->capacity() < res_arg){ size_type n = container_detail::max_value(res_arg, this->size()) + 1; @@ -976,13 +1011,14 @@ class basic_string (allocate_new, n, new_cap, new_cap).first; size_type new_length = 0; + const pointer addr = this->priv_addr(); new_length += priv_uninitialized_copy - (this->priv_addr(), this->priv_addr() + this->priv_size(), new_start); + (addr, addr + this->priv_size(), new_start); this->priv_construct_null(new_start + new_length); this->deallocate_block(); this->is_short(false); this->priv_long_addr(new_start); - this->priv_size(new_length); + this->priv_long_size(new_length); this->priv_storage(new_cap); } } @@ -1003,8 +1039,8 @@ class basic_string //! Complexity: Linear to the number of elements in the vector. void clear() { - if (!empty()) { - Traits::assign(*this->priv_addr(), this->priv_null()); + if (!this->empty()) { + Traits::assign(*this->priv_addr(), CharT(0)); this->priv_size(0); } } @@ -1021,7 +1057,7 @@ class basic_string if(this->priv_storage() > InternalBufferChars){ //Check if we should pass from dynamically allocated buffer //to the internal storage - if(this->priv_size() < (InternalBufferChars)){ + if(this->priv_size() < InternalBufferChars){ //Dynamically allocated buffer attributes pointer long_addr = this->priv_long_addr(); size_type long_storage = this->priv_long_storage(); @@ -1078,9 +1114,10 @@ class basic_string //! Throws: std::range_error if n >= size() //! //! Complexity: Constant. - reference at(size_type n) { - if (n >= size()) - this->throw_out_of_range(); + reference at(size_type n) + { + if (n >= this->size()) + this->throw_out_of_range(); return *(this->priv_addr() + n); } @@ -1093,7 +1130,7 @@ class basic_string //! //! Complexity: Constant. const_reference at(size_type n) const { - if (n >= size()) + if (n >= this->size()) this->throw_out_of_range(); return *(this->priv_addr() + n); } @@ -1177,14 +1214,16 @@ class basic_string //! Effects: Equivalent to append(static_cast(1), c). void push_back(CharT c) { - if (this->priv_size() < this->capacity()){ - this->priv_construct_null(this->priv_addr() + (this->priv_size() + 1)); - Traits::assign(this->priv_addr()[this->priv_size()], c); - this->priv_size(this->priv_size()+1); + const size_type old_size = this->priv_size(); + if (old_size < this->capacity()){ + const pointer addr = this->priv_addr(); + this->priv_construct_null(addr + old_size + 1); + Traits::assign(addr[old_size], c); + this->priv_size(old_size+1); } else{ //No enough memory, insert a new object at the end - this->append((size_type)1, c); + this->append(size_type(1), c); } } @@ -1212,8 +1251,8 @@ class basic_string //! Throws: If memory allocation throws or out_of_range if pos > str.size(). //! //! Returns: *this - basic_string& assign(const basic_string& s, - size_type pos, size_type n) { + basic_string& assign(const basic_string& s, size_type pos, size_type n) + { if (pos > s.size()) this->throw_out_of_range(); return this->assign(s.begin() + pos, @@ -1249,12 +1288,29 @@ class basic_string //! //! Returns: *this template - basic_string& assign(InputIter first, InputIter last) + basic_string& assign(InputIter first, InputIter last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + >::type * = 0 + #endif + ) { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - return this->priv_assign_dispatch(first, last, Result()); + size_type cur = 0; + const pointer addr = this->priv_addr(); + CharT *ptr = container_detail::to_raw_pointer(addr); + const size_type old_size = this->priv_size(); + while (first != last && cur != old_size) { + Traits::assign(*ptr, *first); + ++first; + ++cur; + ++ptr; + } + if (first == last) + this->erase(addr + cur, addr + old_size); + else + this->append(first, last); + return *this; } //! Requires: pos <= size(). @@ -1266,9 +1322,10 @@ class basic_string //! Returns: *this basic_string& insert(size_type pos, const basic_string& s) { - if (pos > size()) + const size_type size_ = this->size(); + if (pos > size_) this->throw_out_of_range(); - if (this->size() > this->max_size() - s.size()) + if (size_ > this->max_size() - s.size()) this->throw_length_error(); this->insert(this->priv_addr() + pos, s.begin(), s.end()); return *this; @@ -1282,13 +1339,14 @@ class basic_string //! Throws: If memory allocation throws or out_of_range if pos1 > size() or pos2 > str.size(). //! //! Returns: *this - basic_string& insert(size_type pos1, const basic_string& s, - size_type pos2, size_type n) + basic_string& insert(size_type pos1, const basic_string& s, size_type pos2, size_type n) { - if (pos1 > this->size() || pos2 > s.size()) + const size_type size_ = this->size(); + const size_type str_size = s.size(); + if (pos1 > size_ || pos2 > str_size) this->throw_out_of_range(); - size_type len = container_detail::min_value(n, s.size() - pos2); - if (this->size() > this->max_size() - len) + size_type len = container_detail::min_value(n, str_size - pos2); + if (size_ > this->max_size() - len) this->throw_length_error(); const CharT *beg_ptr = container_detail::to_raw_pointer(s.begin()) + pos2; const CharT *end_ptr = beg_ptr + len; @@ -1327,7 +1385,7 @@ class basic_string //! Returns: *this basic_string& insert(size_type pos, const CharT* s) { - if (pos > size()) + if (pos > this->size()) this->throw_out_of_range(); size_type len = Traits::length(s); if (this->size() > this->max_size() - len) @@ -1359,7 +1417,7 @@ class basic_string //! Returns: An iterator which refers to the copy of the inserted character. iterator insert(const_iterator p, CharT c) { - size_type new_offset = p - this->priv_addr() + 1; + size_type new_offset = p - this->priv_addr(); this->insert(p, cvalue_iterator(c, 1), cvalue_iterator()); return this->priv_addr() + new_offset; } @@ -1369,28 +1427,144 @@ class basic_string //! //! Effects: Inserts n copies of c before the character referred to by p. //! - //! Returns: An iterator which refers to the copy of the first - //! inserted character, or p if n == 0. - void insert(const_iterator p, size_type n, CharT c) - { - this->insert(p, cvalue_iterator(c, n), cvalue_iterator()); - } + //! Returns: an iterator to the first inserted element or p if n is 0. + iterator insert(const_iterator p, size_type n, CharT c) + { return this->insert(p, cvalue_iterator(c, n), cvalue_iterator()); } //! Requires: p is a valid iterator on *this. [first,last) is a valid range. //! //! Effects: Equivalent to insert(p - begin(), basic_string(first, last)). //! - //! Returns: An iterator which refers to the copy of the first - //! inserted character, or p if first == last. + //! Returns: an iterator to the first inserted element or p if first == last. template - void insert(const_iterator p, InputIter first, InputIter last) + iterator insert(const_iterator p, InputIter first, InputIter last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_insert_dispatch(p, first, last, Result()); + const size_type n_pos = p - this->cbegin(); + for ( ; first != last; ++first, ++p) { + p = this->insert(p, *first); + } + return this->begin() + n_pos; } + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + iterator insert(const_iterator p, ForwardIter first, ForwardIter last + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !container_detail::is_input_iterator::value + >::type * = 0 + ) + { + const size_type n_pos = p - this->cbegin(); + if (first != last) { + const size_type n = std::distance(first, last); + const size_type old_size = this->priv_size(); + const size_type remaining = this->capacity() - old_size; + const pointer old_start = this->priv_addr(); + bool enough_capacity = false; + std::pair allocation_ret; + size_type new_cap = 0; + + //Check if we have enough capacity + if (remaining >= n){ + enough_capacity = true; + } + else { + //Otherwise expand current buffer or allocate new storage + new_cap = this->next_capacity(n); + allocation_ret = this->allocation_command + (allocate_new | expand_fwd | expand_bwd, old_size + n + 1, + new_cap, new_cap, old_start); + + //Check forward expansion + if(old_start == allocation_ret.first){ + enough_capacity = true; + this->priv_storage(new_cap); + } + } + + //Reuse same buffer + if(enough_capacity){ + const size_type elems_after = old_size - (p - old_start); + const size_type old_length = old_size; + if (elems_after >= n) { + const pointer pointer_past_last = old_start + old_size + 1; + priv_uninitialized_copy(old_start + (old_size - n + 1), + pointer_past_last, pointer_past_last); + + this->priv_size(old_size+n); + Traits::move(const_cast(container_detail::to_raw_pointer(p + n)), + container_detail::to_raw_pointer(p), + (elems_after - n) + 1); + this->priv_copy(first, last, const_cast(container_detail::to_raw_pointer(p))); + } + else { + ForwardIter mid = first; + std::advance(mid, elems_after + 1); + + priv_uninitialized_copy(mid, last, old_start + old_size + 1); + const size_type newer_size = old_size + (n - elems_after); + this->priv_size(newer_size); + priv_uninitialized_copy + (p, const_iterator(old_start + old_length + 1), + old_start + newer_size); + this->priv_size(newer_size + elems_after); + this->priv_copy(first, mid, const_cast(container_detail::to_raw_pointer(p))); + } + } + else{ + pointer new_start = allocation_ret.first; + if(!allocation_ret.second){ + //Copy data to new buffer + size_type new_length = 0; + //This can't throw, since characters are POD + new_length += priv_uninitialized_copy + (const_iterator(old_start), p, new_start); + new_length += priv_uninitialized_copy + (first, last, new_start + new_length); + new_length += priv_uninitialized_copy + (p, const_iterator(old_start + old_size), + new_start + new_length); + this->priv_construct_null(new_start + new_length); + + this->deallocate_block(); + this->is_short(false); + this->priv_long_addr(new_start); + this->priv_long_size(new_length); + this->priv_long_storage(new_cap); + } + else{ + //value_type is POD, so backwards expansion is much easier + //than with vector + value_type * const oldbuf = container_detail::to_raw_pointer(old_start); + value_type * const newbuf = container_detail::to_raw_pointer(new_start); + const value_type *const pos = container_detail::to_raw_pointer(p); + const size_type before = pos - oldbuf; + + //First move old data + Traits::move(newbuf, oldbuf, before); + Traits::move(newbuf + before + n, pos, old_size - before); + //Now initialize the new data + priv_uninitialized_copy(first, last, new_start + before); + this->priv_construct_null(new_start + (old_size + n)); + this->is_short(false); + this->priv_long_addr(new_start); + this->priv_long_size(old_size + n); + this->priv_long_storage(new_cap); + } + } + } + return this->begin() + n_pos; + } + #endif + //! Requires: pos <= size() //! //! Effects: Determines the effective length xlen of the string to be removed as the smaller of n and size() - pos. @@ -1404,9 +1578,10 @@ class basic_string //! Returns: *this basic_string& erase(size_type pos = 0, size_type n = npos) { - if (pos > size()) + if (pos > this->size()) this->throw_out_of_range(); - erase(this->priv_addr() + pos, this->priv_addr() + pos + container_detail::min_value(n, size() - pos)); + const pointer addr = this->priv_addr(); + erase(addr + pos, addr + pos + container_detail::min_value(n, this->size() - pos)); return *this; } @@ -1419,11 +1594,12 @@ class basic_string iterator erase(const_iterator p) { // The move includes the terminating null. - CharT *ptr = const_cast(container_detail::to_raw_pointer(p)); + CharT * const ptr = const_cast(container_detail::to_raw_pointer(p)); + const size_type old_size = this->priv_size(); Traits::move(ptr, container_detail::to_raw_pointer(p + 1), - this->priv_size() - (p - this->priv_addr())); - this->priv_size(this->priv_size()-1); + old_size - (p - this->priv_addr())); + this->priv_size(old_size-1); return iterator(ptr); } @@ -1439,11 +1615,12 @@ class basic_string { CharT * f = const_cast(container_detail::to_raw_pointer(first)); if (first != last) { // The move includes the terminating null. - size_type num_erased = last - first; + const size_type num_erased = last - first; + const size_type old_size = this->priv_size(); Traits::move(f, container_detail::to_raw_pointer(last), - (this->priv_size() + 1)-(last - this->priv_addr())); - size_type new_length = this->priv_size() - num_erased; + (old_size + 1)-(last - this->priv_addr())); + const size_type new_length = old_size - num_erased; this->priv_size(new_length); } return iterator(f); @@ -1456,8 +1633,9 @@ class basic_string //! Effects: Equivalent to erase(size() - 1, 1). void pop_back() { - Traits::assign(this->priv_addr()[this->priv_size()-1], this->priv_null()); - this->priv_size(this->priv_size()-1);; + const size_type old_size = this->priv_size(); + Traits::assign(this->priv_addr()[old_size-1], CharT(0)); + this->priv_size(old_size-1);; } //! Requires: pos1 <= size(). @@ -1469,13 +1647,15 @@ class basic_string //! Returns: *this basic_string& replace(size_type pos1, size_type n1, const basic_string& str) { - if (pos1 > size()) + if (pos1 > this->size()) this->throw_out_of_range(); - const size_type len = container_detail::min_value(n1, size() - pos1); + const size_type len = container_detail::min_value(n1, this->size() - pos1); if (this->size() - len >= this->max_size() - str.size()) this->throw_length_error(); - return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len, - str.begin(), str.end()); + const pointer addr = this->priv_addr(); + return this->replace( const_iterator(addr + pos1) + , const_iterator(addr + pos1 + len) + , str.begin(), str.end()); } //! Requires: pos1 <= size() and pos2 <= str.size(). @@ -1490,14 +1670,16 @@ class basic_string basic_string& replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2) { - if (pos1 > size() || pos2 > str.size()) + if (pos1 > this->size() || pos2 > str.size()) this->throw_out_of_range(); - const size_type len1 = container_detail::min_value(n1, size() - pos1); + const size_type len1 = container_detail::min_value(n1, this->size() - pos1); const size_type len2 = container_detail::min_value(n2, str.size() - pos2); if (this->size() - len1 >= this->max_size() - len2) this->throw_length_error(); - return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len1, - str.priv_addr() + pos2, str.priv_addr() + pos2 + len2); + const pointer addr = this->priv_addr(); + const pointer straddr = str.priv_addr(); + return this->replace(addr + pos1, addr + pos1 + len1, + straddr + pos2, straddr + pos2 + len2); } //! Requires: pos1 <= size() and s points to an array of at least n2 elements of CharT. @@ -1514,16 +1696,15 @@ class basic_string //! if the length of the resulting string would exceed max_size() //! //! Returns: *this - basic_string& replace(size_type pos1, size_type n1, - const CharT* s, size_type n2) + basic_string& replace(size_type pos1, size_type n1, const CharT* s, size_type n2) { - if (pos1 > size()) + if (pos1 > this->size()) this->throw_out_of_range(); - const size_type len = container_detail::min_value(n1, size() - pos1); + const size_type len = container_detail::min_value(n1, this->size() - pos1); if (n2 > this->max_size() || size() - len >= this->max_size() - n2) this->throw_length_error(); - return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len, - s, s + n2); + const pointer addr = this->priv_addr(); + return this->replace(addr + pos1, addr + pos1 + len, s, s + n2); } //! Requires: pos1 <= size() and s points to an array of at least n2 elements of CharT. @@ -1542,13 +1723,14 @@ class basic_string //! Returns: *this basic_string& replace(size_type pos, size_type n1, const CharT* s) { - if (pos > size()) + if (pos > this->size()) this->throw_out_of_range(); - const size_type len = container_detail::min_value(n1, size() - pos); + const size_type len = container_detail::min_value(n1, this->size() - pos); const size_type n2 = Traits::length(s); - if (n2 > this->max_size() || size() - len >= this->max_size() - n2) + if (n2 > this->max_size() || this->size() - len >= this->max_size() - n2) this->throw_length_error(); - return this->replace(this->priv_addr() + pos, this->priv_addr() + pos + len, + const pointer addr = this->priv_addr(); + return this->replace(addr + pos, addr + pos + len, s, s + Traits::length(s)); } @@ -1562,12 +1744,13 @@ class basic_string //! Returns: *this basic_string& replace(size_type pos1, size_type n1, size_type n2, CharT c) { - if (pos1 > size()) + if (pos1 > this->size()) this->throw_out_of_range(); - const size_type len = container_detail::min_value(n1, size() - pos1); - if (n2 > this->max_size() || size() - len >= this->max_size() - n2) + const size_type len = container_detail::min_value(n1, this->size() - pos1); + if (n2 > this->max_size() || this->size() - len >= this->max_size() - n2) this->throw_length_error(); - return this->replace(this->priv_addr() + pos1, this->priv_addr() + pos1 + len, n2, c); + const pointer addr = this->priv_addr(); + return this->replace(addr + pos1, addr + pos1 + len, n2, c); } //! Requires: [begin(),i1) and [i1,i2) are valid ranges. @@ -1631,14 +1814,51 @@ class basic_string //! //! Returns: *this template - basic_string& replace(const_iterator i1, const_iterator i2, InputIter j1, InputIter j2) + basic_string& replace(const_iterator i1, const_iterator i2, InputIter j1, InputIter j2 + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - return this->priv_replace_dispatch(i1, i2, j1, j2, Result()); + for ( ; i1 != i2 && j1 != j2; ++i1, ++j1){ + Traits::assign(*const_cast(container_detail::to_raw_pointer(i1)), *j1); + } + + if (j1 == j2) + this->erase(i1, i2); + else + this->insert(i2, j1, j2); + return *this; } + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + basic_string& replace(const_iterator i1, const_iterator i2, ForwardIter j1, ForwardIter j2 + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !container_detail::is_input_iterator::value + >::type * = 0 + ) + { + difference_type n = std::distance(j1, j2); + const difference_type len = i2 - i1; + if (len >= n) { + this->priv_copy(j1, j2, const_cast(container_detail::to_raw_pointer(i1))); + this->erase(i1 + n, i2); + } + else { + ForwardIter m = j1; + std::advance(m, len); + this->priv_copy(j1, m, const_cast(container_detail::to_raw_pointer(i1))); + this->insert(i2, m, j2); + } + return *this; + } + #endif + //! Requires: pos <= size() //! //! Effects: Determines the effective length rlen of the string to copy as the @@ -1652,9 +1872,9 @@ class basic_string //! Returns: rlen size_type copy(CharT* s, size_type n, size_type pos = 0) const { - if (pos > size()) + if (pos > this->size()) this->throw_out_of_range(); - const size_type len = container_detail::min_value(n, size() - pos); + const size_type len = container_detail::min_value(n, this->size() - pos); Traits::copy(s, container_detail::to_raw_pointer(this->priv_addr() + pos), len); return len; } @@ -1672,7 +1892,7 @@ class basic_string //! Requires: The program shall not alter any of the values stored in the character array. //! - //! Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()]. + //! Returns: Allocator pointer p such that p + i == &operator[](i) for each i in [0,size()]. //! //! Complexity: constant time. const CharT* c_str() const @@ -1680,7 +1900,7 @@ class basic_string //! Requires: The program shall not alter any of the values stored in the character array. //! - //! Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()]. + //! Returns: Allocator pointer p such that p + i == &operator[](i) for each i in [0,size()]. //! //! Complexity: constant time. const CharT* data() const @@ -1703,12 +1923,13 @@ class basic_string //! Returns: find(basic_string(s,n),pos). size_type find(const CharT* s, size_type pos, size_type n) const { - if (pos + n > size()) + if (pos + n > this->size()) return npos; else { - pointer finish = this->priv_addr() + this->priv_size(); + const pointer addr = this->priv_addr(); + pointer finish = addr + this->priv_size(); const const_iterator result = - std::search(container_detail::to_raw_pointer(this->priv_addr() + pos), + std::search(container_detail::to_raw_pointer(addr + pos), container_detail::to_raw_pointer(finish), s, s + n, Eq_traits()); return result != finish ? result - begin() : npos; @@ -1721,19 +1942,21 @@ class basic_string //! //! Returns: find(basic_string(s), pos). size_type find(const CharT* s, size_type pos = 0) const - { return find(s, pos, Traits::length(s)); } + { return this->find(s, pos, Traits::length(s)); } //! Throws: Nothing //! //! Returns: find(basic_string(1,c), pos). size_type find(CharT c, size_type pos = 0) const { - if (pos >= size()) + const size_type size_ = this->size(); + if (pos >= size_) return npos; else { - pointer finish = this->priv_addr() + this->priv_size(); + const pointer addr = this->priv_addr(); + pointer finish = addr + size_; const const_iterator result = - std::find_if(this->priv_addr() + pos, finish, + std::find_if(addr + pos, finish, std::bind2nd(Eq_traits(), c)); return result != finish ? result - begin() : npos; } @@ -1757,7 +1980,7 @@ class basic_string //! Returns: rfind(basic_string(s, n), pos). size_type rfind(const CharT* s, size_type pos, size_type n) const { - const size_type len = size(); + const size_type len = this->size(); if (n > len) return npos; @@ -1786,7 +2009,7 @@ class basic_string //! Returns: rfind(basic_string(1,c),pos). size_type rfind(CharT c, size_type pos = npos) const { - const size_type len = size(); + const size_type len = this->size(); if (len < 1) return npos; @@ -1816,14 +2039,15 @@ class basic_string //! Returns: find_first_of(basic_string(s, n), pos). size_type find_first_of(const CharT* s, size_type pos, size_type n) const { - if (pos >= size()) + const size_type size_ = this->size(); + if (pos >= size_) return npos; else { - pointer finish = this->priv_addr() + this->priv_size(); - const_iterator result = std::find_first_of(this->priv_addr() + pos, finish, - s, s + n, - Eq_traits()); - return result != finish ? result - begin() : npos; + const pointer addr = this->priv_addr(); + pointer finish = addr + size_; + const_iterator result = std::find_first_of + (addr + pos, finish, s, s + n, Eq_traits()); + return result != finish ? result - this->begin() : npos; } } @@ -1860,17 +2084,17 @@ class basic_string //! Returns: find_last_of(basic_string(s, n), pos). size_type find_last_of(const CharT* s, size_type pos, size_type n) const { - const size_type len = size(); + const size_type len = this->size(); if (len < 1) return npos; else { - const const_iterator last = this->priv_addr() + container_detail::min_value(len - 1, pos) + 1; + const pointer addr = this->priv_addr(); + const const_iterator last = addr + container_detail::min_value(len - 1, pos) + 1; const const_reverse_iterator rresult = std::find_first_of(const_reverse_iterator(last), rend(), - s, s + n, - Eq_traits()); - return rresult != rend() ? (rresult.base() - 1) - this->priv_addr() : npos; + s, s + n, Eq_traits()); + return rresult != rend() ? (rresult.base() - 1) - addr : npos; } } @@ -1906,13 +2130,14 @@ class basic_string //! Returns: find_first_not_of(basic_string(s, n), pos). size_type find_first_not_of(const CharT* s, size_type pos, size_type n) const { - if (pos > size()) + if (pos > this->size()) return npos; else { - pointer finish = this->priv_addr() + this->priv_size(); - const_iterator result = std::find_if(this->priv_addr() + pos, finish, - Not_within_traits(s, s + n)); - return result != finish ? result - this->priv_addr() : npos; + const pointer addr = this->priv_addr(); + const pointer finish = addr + this->priv_size(); + const const_iterator result = std::find_if + (addr + pos, finish, Not_within_traits(s, s + n)); + return result != finish ? result - addr : npos; } } @@ -1929,12 +2154,13 @@ class basic_string //! Returns: find_first_not_of(basic_string(1, c), pos). size_type find_first_not_of(CharT c, size_type pos = 0) const { - if (pos > size()) + if (pos > this->size()) return npos; else { - pointer finish = this->priv_addr() + this->priv_size(); - const_iterator result - = std::find_if(this->priv_addr() + pos, finish, + const pointer addr = this->priv_addr(); + const pointer finish = addr + this->priv_size(); + const const_iterator result + = std::find_if(addr + pos, finish, std::not1(std::bind2nd(Eq_traits(), c))); return result != finish ? result - begin() : npos; } @@ -1957,7 +2183,7 @@ class basic_string //! Returns: find_last_not_of(basic_string(s, n), pos). size_type find_last_not_of(const CharT* s, size_type pos, size_type n) const { - const size_type len = size(); + const size_type len = this->size(); if (len < 1) return npos; @@ -1983,13 +2209,13 @@ class basic_string //! Returns: find_last_not_of(basic_string(1, c), pos). size_type find_last_not_of(CharT c, size_type pos = npos) const { - const size_type len = size(); + const size_type len = this->size(); if (len < 1) return npos; else { const const_iterator last = begin() + container_detail::min_value(len - 1, pos) + 1; - const_reverse_iterator rresult = + const const_reverse_iterator rresult = std::find_if(const_reverse_iterator(last), rend(), std::not1(std::bind2nd(Eq_traits(), c))); return rresult != rend() ? (rresult.base() - 1) - begin() : npos; @@ -2006,10 +2232,11 @@ class basic_string //! Returns: basic_string(data()+pos,rlen). basic_string substr(size_type pos = 0, size_type n = npos) const { - if (pos > size()) + if (pos > this->size()) this->throw_out_of_range(); - return basic_string(this->priv_addr() + pos, - this->priv_addr() + pos + container_detail::min_value(n, size() - pos), this->alloc()); + const pointer addr = this->priv_addr(); + return basic_string(addr + pos, + addr + pos + container_detail::min_value(n, size() - pos), this->alloc()); } //! Effects: Determines the effective length rlen of the string to copy as @@ -2022,7 +2249,11 @@ class basic_string //! Otherwise, returns a value < 0 if size() < str.size(), a 0 value if size() == str.size(), //! and value > 0 if size() > str.size() int compare(const basic_string& str) const - { return s_compare(this->priv_addr(), this->priv_addr() + this->priv_size(), str.priv_addr(), str.priv_addr() + str.priv_size()); } + { + const pointer addr = this->priv_addr(); + const pointer str_addr = str.priv_addr(); + return s_compare(addr, addr + this->priv_size(), str_addr, str_addr + str.priv_size()); + } //! Requires: pos1 <= size() //! @@ -2034,11 +2265,13 @@ class basic_string //! Returns:basic_string(*this,pos1,n1).compare(str). int compare(size_type pos1, size_type n1, const basic_string& str) const { - if (pos1 > size()) + if (pos1 > this->size()) this->throw_out_of_range(); - return s_compare(this->priv_addr() + pos1, - this->priv_addr() + pos1 + container_detail::min_value(n1, size() - pos1), - str.priv_addr(), str.priv_addr() + str.priv_size()); + const pointer addr = this->priv_addr(); + const pointer str_addr = str.priv_addr(); + return s_compare(addr + pos1, + addr + pos1 + container_detail::min_value(n1, this->size() - pos1), + str_addr, str_addr + str.priv_size()); } //! Requires: pos1 <= size() and pos2 <= str.size() @@ -2051,19 +2284,24 @@ class basic_string //! Returns: basic_string(*this, pos1, n1).compare(basic_string(str, pos2, n2)). int compare(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2) const { - if (pos1 > size() || pos2 > str.size()) + if (pos1 > this->size() || pos2 > str.size()) this->throw_out_of_range(); - return s_compare(this->priv_addr() + pos1, - this->priv_addr() + pos1 + container_detail::min_value(n1, size() - pos1), - str.priv_addr() + pos2, - str.priv_addr() + pos2 + container_detail::min_value(n2, size() - pos2)); + const pointer addr = this->priv_addr(); + const pointer str_addr = str.priv_addr(); + return s_compare(addr + pos1, + addr + pos1 + container_detail::min_value(n1, this->size() - pos1), + str_addr + pos2, + str_addr + pos2 + container_detail::min_value(n2, str.size() - pos2)); } //! Throws: Nothing //! //! Returns: compare(basic_string(s)). int compare(const CharT* s) const - { return s_compare(this->priv_addr(), this->priv_addr() + this->priv_size(), s, s + Traits::length(s)); } + { + const pointer addr = this->priv_addr(); + return s_compare(addr, addr + this->priv_size(), s, s + Traits::length(s)); + } //! Requires: pos1 > size() and s points to an array of at least n2 elements of CharT. @@ -2074,10 +2312,11 @@ class basic_string int compare(size_type pos1, size_type n1, const CharT* s, size_type n2) const { - if (pos1 > size()) + if (pos1 > this->size()) this->throw_out_of_range(); - return s_compare(this->priv_addr() + pos1, - this->priv_addr() + pos1 + container_detail::min_value(n1, size() - pos1), + const pointer addr = this->priv_addr(); + return s_compare( addr + pos1, + addr + pos1 + container_detail::min_value(n1, this->size() - pos1), s, s + n2); } @@ -2109,12 +2348,12 @@ class basic_string { //Allocate a new buffer. size_type real_cap = 0; - pointer long_addr = this->priv_long_addr(); - size_type long_size = this->priv_long_size(); - size_type long_storage = this->priv_long_storage(); + const pointer long_addr = this->priv_long_addr(); + const size_type long_size = this->priv_long_size(); + const size_type long_storage = this->priv_long_storage(); //We can make this nothrow as chars are always NoThrowCopyables try{ - std::pair ret = this->allocation_command + const std::pair ret = this->allocation_command (allocate_new, long_size+1, long_size+1, real_cap, long_addr); //Copy and update Traits::copy( container_detail::to_raw_pointer(ret.first) @@ -2145,55 +2384,12 @@ class basic_string } void priv_construct_null(pointer p) - { this->construct(p, 0); } - - static CharT priv_null() - { return (CharT) 0; } + { this->construct(p, CharT(0)); } // Helper functions used by constructors. It is a severe error for // any of them to be called anywhere except from within constructors. void priv_terminate_string() - { this->priv_construct_null(this->priv_addr() + this->priv_size()); } - - template - void priv_range_initialize(InputIter f, InputIter l, - std::input_iterator_tag) - { - this->allocate_initial_block(InternalBufferChars); - this->priv_construct_null(this->priv_addr() + this->priv_size()); - this->append(f, l); - } - - template - void priv_range_initialize(ForwardIter f, ForwardIter l, - std::forward_iterator_tag) - { - difference_type n = std::distance(f, l); - this->allocate_initial_block(container_detail::max_value(n+1, InternalBufferChars)); - priv_uninitialized_copy(f, l, this->priv_addr()); - this->priv_size(n); - this->priv_terminate_string(); - } - - template - void priv_range_initialize(InputIter f, InputIter l) - { - typedef typename std::iterator_traits::iterator_category Category; - this->priv_range_initialize(f, l, Category()); - } - - template - void priv_initialize_dispatch(Integer n, Integer x, container_detail::true_) - { - this->allocate_initial_block(container_detail::max_value(n+1, InternalBufferChars)); - priv_uninitialized_fill_n(this->priv_addr(), n, x); - this->priv_size(n); - this->priv_terminate_string(); - } - - template - void priv_initialize_dispatch(InputIter f, InputIter l, container_detail::false_) - { this->priv_range_initialize(f, l); } + { this->priv_construct_null(this->priv_end_addr()); } template inline void priv_uninitialized_fill_n(FwdIt first, Count count, const CharT val) @@ -2241,154 +2437,6 @@ class basic_string return (constructed); } - template - basic_string& priv_assign_dispatch(Integer n, Integer x, container_detail::true_) - { return this->assign((size_type) n, (CharT) x); } - - template - basic_string& priv_assign_dispatch(InputIter f, InputIter l, - container_detail::false_) - { - size_type cur = 0; - CharT *ptr = container_detail::to_raw_pointer(this->priv_addr()); - while (f != l && cur != this->priv_size()) { - Traits::assign(*ptr, *f); - ++f; - ++cur; - ++ptr; - } - if (f == l) - this->erase(this->priv_addr() + cur, this->priv_addr() + this->priv_size()); - else - this->append(f, l); - return *this; - } - - template - void priv_insert(const_iterator p, InputIter first, InputIter last, std::input_iterator_tag) - { - for ( ; first != last; ++first, ++p) { - p = this->insert(p, *first); - } - } - - template - void priv_insert(const_iterator position, ForwardIter first, - ForwardIter last, std::forward_iterator_tag) - { - if (first != last) { - size_type n = std::distance(first, last); - size_type remaining = this->capacity() - this->priv_size(); - const size_type old_size = this->size(); - pointer old_start = this->priv_addr(); - bool enough_capacity = false; - std::pair allocation_ret; - size_type new_cap = 0; - - //Check if we have enough capacity - if (remaining >= n){ - enough_capacity = true; - } - else { - //Otherwise expand current buffer or allocate new storage - new_cap = this->next_capacity(n); - allocation_ret = this->allocation_command - (allocate_new | expand_fwd | expand_bwd, old_size + n + 1, - new_cap, new_cap, old_start); - - //Check forward expansion - if(old_start == allocation_ret.first){ - enough_capacity = true; - this->priv_storage(new_cap); - } - } - - //Reuse same buffer - if(enough_capacity){ - const size_type elems_after = - this->priv_size() - (position - this->priv_addr()); - size_type old_length = this->priv_size(); - if (elems_after >= n) { - pointer pointer_past_last = this->priv_addr() + this->priv_size() + 1; - priv_uninitialized_copy(this->priv_addr() + (this->priv_size() - n + 1), - pointer_past_last, pointer_past_last); - - this->priv_size(this->priv_size()+n); - Traits::move(const_cast(container_detail::to_raw_pointer(position + n)), - container_detail::to_raw_pointer(position), - (elems_after - n) + 1); - this->priv_copy(first, last, const_cast(container_detail::to_raw_pointer(position))); - } - else { - ForwardIter mid = first; - std::advance(mid, elems_after + 1); - - priv_uninitialized_copy(mid, last, this->priv_addr() + this->priv_size() + 1); - this->priv_size(this->priv_size() + (n - elems_after)); - priv_uninitialized_copy - (position, const_iterator(this->priv_addr() + old_length + 1), - this->priv_addr() + this->priv_size()); - this->priv_size(this->priv_size() + elems_after); - this->priv_copy(first, mid, const_cast(container_detail::to_raw_pointer(position))); - } - } - else{ - pointer new_start = allocation_ret.first; - if(!allocation_ret.second){ - //Copy data to new buffer - size_type new_length = 0; - //This can't throw, since characters are POD - new_length += priv_uninitialized_copy - (const_iterator(this->priv_addr()), position, new_start); - new_length += priv_uninitialized_copy - (first, last, new_start + new_length); - new_length += priv_uninitialized_copy - (position, const_iterator(this->priv_addr() + this->priv_size()), - new_start + new_length); - this->priv_construct_null(new_start + new_length); - - this->deallocate_block(); - this->is_short(false); - this->priv_long_addr(new_start); - this->priv_long_size(new_length); - this->priv_long_storage(new_cap); - } - else{ - //value_type is POD, so backwards expansion is much easier - //than with vector - value_type *oldbuf = container_detail::to_raw_pointer(old_start); - value_type *newbuf = container_detail::to_raw_pointer(new_start); - const value_type *pos = container_detail::to_raw_pointer(position); - size_type before = pos - oldbuf; - - //First move old data - Traits::move(newbuf, oldbuf, before); - Traits::move(newbuf + before + n, pos, old_size - before); - //Now initialize the new data - priv_uninitialized_copy(first, last, new_start + before); - this->priv_construct_null(new_start + (old_size + n)); - this->is_short(false); - this->priv_long_addr(new_start); - this->priv_long_size(old_size + n); - this->priv_long_storage(new_cap); - } - } - } - } - - template - void priv_insert_dispatch(const_iterator p, Integer n, Integer x, - container_detail::true_) - { insert(p, (size_type) n, (CharT) x); } - - template - void priv_insert_dispatch(const_iterator p, InputIter first, InputIter last, - container_detail::false_) - { - typedef typename std::iterator_traits::iterator_category Category; - priv_insert(p, first, last, Category()); - } - template void priv_copy(InputIterator first, InputIterator last, OutIterator result) { @@ -2414,40 +2462,6 @@ class basic_string return this->priv_replace(first, last, f, l, Category()); } - - template - basic_string& priv_replace(const_iterator first, const_iterator last, - InputIter f, InputIter l, std::input_iterator_tag) - { - for ( ; first != last && f != l; ++first, ++f) - Traits::assign(*first, *f); - - if (f == l) - this->erase(first, last); - else - this->insert(last, f, l); - return *this; - } - - template - basic_string& priv_replace(const_iterator first, const_iterator last, - ForwardIter f, ForwardIter l, - std::forward_iterator_tag) - { - difference_type n = std::distance(f, l); - const difference_type len = last - first; - if (len >= n) { - this->priv_copy(f, l, const_cast(container_detail::to_raw_pointer(first))); - this->erase(first + n, last); - } - else { - ForwardIter m = f; - std::advance(m, len); - this->priv_copy(f, m, const_cast(container_detail::to_raw_pointer(first))); - this->insert(last, m, l); - } - return *this; - } /// @endcond }; @@ -2469,10 +2483,10 @@ wstring; /// @cond -template -const typename basic_string::size_type -basic_string::npos - = (typename basic_string::size_type) -1; +template +const typename basic_string::size_type +basic_string::npos + = (typename basic_string::size_type) -1; /// @endcond @@ -2481,273 +2495,212 @@ basic_string::npos // Operator+ -template -inline basic_string -operator+(const basic_string& x, - const basic_string& y) +template inline + basic_string + operator+(const basic_string& x + ,const basic_string& y) { - typedef basic_string str_t; + typedef basic_string str_t; typedef typename str_t::reserve_t reserve_t; reserve_t reserve; str_t result(reserve, x.size() + y.size(), x.get_stored_allocator()); result.append(x); result.append(y); - return boost::move(result); + return result; } -template inline -BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) - operator+( - BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx - , BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +template inline + basic_string operator+ + ( BOOST_RV_REF_BEG basic_string BOOST_RV_REF_END mx + , BOOST_RV_REF_BEG basic_string BOOST_RV_REF_END my) { mx += my; return boost::move(mx); } -template inline -BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) - operator+( - BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx - , const basic_string& y) +template inline + basic_string operator+ + ( BOOST_RV_REF_BEG basic_string BOOST_RV_REF_END mx + , const basic_string& y) { mx += y; return boost::move(mx); } -template inline -BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) - operator+(const basic_string& x, - BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +template inline + basic_string operator+ + (const basic_string& x + ,BOOST_RV_REF_BEG basic_string BOOST_RV_REF_END my) { - typedef typename basic_string::size_type size_type; - my.replace(size_type(0), size_type(0), x); + my.insert(my.begin(), x.begin(), x.end()); return boost::move(my); } -template -inline basic_string -operator+(const CharT* s, const basic_string& y) +template inline + basic_string operator+ + (const CharT* s, basic_string y) { - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - const typename str_t::size_type n = Traits::length(s); - str_t result(reserve, n + y.size()); - result.append(s, s + n); - result.append(y); - return boost::move(result); + y.insert(y.begin(), s, s + Traits::length(s)); + return y; } -template inline -BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+(const CharT* s, - BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +template inline + basic_string operator+ + (basic_string x, const CharT* s) { - typedef typename basic_string::size_type size_type; - return boost::move(my.replace(size_type(0), size_type(0), s)); + x += s; + return x; } -template -inline basic_string -operator+(CharT c, const basic_string& y) +template inline + basic_string operator+ + (CharT c, basic_string y) { - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - str_t result(reserve, 1 + y.size()); - result.push_back(c); - result.append(y); - return boost::move(result); + y.insert(y.begin(), c); + return y; } -template inline -BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+(CharT c, - BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) my) +template inline + basic_string operator+ + (basic_string x, const CharT c) { - typedef typename basic_string::size_type size_type; - return boost::move(my.replace(size_type(0), size_type(0), &c, &c + 1)); -} - -template -inline basic_string -operator+(const basic_string& x, const CharT* s) -{ - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - const typename str_t::size_type n = Traits::length(s); - str_t result(reserve, x.size() + n, x.get_stored_allocator()); - result.append(x); - result.append(s, s + n); - return boost::move(result); -} - -template -BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+(BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx - , const CharT* s) -{ - mx += s; - return boost::move(mx); -} - -template -inline basic_string -operator+(const basic_string& x, const CharT c) -{ - typedef basic_string str_t; - typedef typename str_t::reserve_t reserve_t; - reserve_t reserve; - str_t result(reserve, x.size() + 1, x.get_stored_allocator()); - result.append(x); - result.push_back(c); - return boost::move(result); -} - -template -BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) -operator+( BOOST_RV_REF_3_TEMPL_ARGS(basic_string, CharT, Traits, A) mx - , const CharT c) -{ - mx += c; - return boost::move(mx); + x += c; + return x; } // Operator== and operator!= -template +template inline bool -operator==(const basic_string& x, - const basic_string& y) +operator==(const basic_string& x, + const basic_string& y) { return x.size() == y.size() && Traits::compare(x.data(), y.data(), x.size()) == 0; } -template +template inline bool -operator==(const CharT* s, const basic_string& y) +operator==(const CharT* s, const basic_string& y) { - typename basic_string::size_type n = Traits::length(s); + typename basic_string::size_type n = Traits::length(s); return n == y.size() && Traits::compare(s, y.data(), n) == 0; } -template +template inline bool -operator==(const basic_string& x, const CharT* s) +operator==(const basic_string& x, const CharT* s) { - typename basic_string::size_type n = Traits::length(s); + typename basic_string::size_type n = Traits::length(s); return x.size() == n && Traits::compare(x.data(), s, n) == 0; } -template +template inline bool -operator!=(const basic_string& x, - const basic_string& y) +operator!=(const basic_string& x, + const basic_string& y) { return !(x == y); } -template +template inline bool -operator!=(const CharT* s, const basic_string& y) +operator!=(const CharT* s, const basic_string& y) { return !(s == y); } -template +template inline bool -operator!=(const basic_string& x, const CharT* s) +operator!=(const basic_string& x, const CharT* s) { return !(x == s); } // Operator< (and also >, <=, and >=). -template +template inline bool -operator<(const basic_string& x, const basic_string& y) +operator<(const basic_string& x, const basic_string& y) { return x.compare(y) < 0; -// return basic_string +// return basic_string // ::s_compare(x.begin(), x.end(), y.begin(), y.end()) < 0; } -template +template inline bool -operator<(const CharT* s, const basic_string& y) +operator<(const CharT* s, const basic_string& y) { return y.compare(s) > 0; -// basic_string::size_type n = Traits::length(s); -// return basic_string +// basic_string::size_type n = Traits::length(s); +// return basic_string // ::s_compare(s, s + n, y.begin(), y.end()) < 0; } -template +template inline bool -operator<(const basic_string& x, +operator<(const basic_string& x, const CharT* s) { return x.compare(s) < 0; -// basic_string::size_type n = Traits::length(s); -// return basic_string +// basic_string::size_type n = Traits::length(s); +// return basic_string // ::s_compare(x.begin(), x.end(), s, s + n) < 0; } -template +template inline bool -operator>(const basic_string& x, - const basic_string& y) { +operator>(const basic_string& x, + const basic_string& y) { return y < x; } -template +template inline bool -operator>(const CharT* s, const basic_string& y) { +operator>(const CharT* s, const basic_string& y) { return y < s; } -template +template inline bool -operator>(const basic_string& x, const CharT* s) +operator>(const basic_string& x, const CharT* s) { return s < x; } -template +template inline bool -operator<=(const basic_string& x, - const basic_string& y) +operator<=(const basic_string& x, + const basic_string& y) { return !(y < x); } -template +template inline bool -operator<=(const CharT* s, const basic_string& y) +operator<=(const CharT* s, const basic_string& y) { return !(y < s); } -template +template inline bool -operator<=(const basic_string& x, const CharT* s) +operator<=(const basic_string& x, const CharT* s) { return !(s < x); } -template +template inline bool -operator>=(const basic_string& x, - const basic_string& y) +operator>=(const basic_string& x, + const basic_string& y) { return !(x < y); } -template +template inline bool -operator>=(const CharT* s, const basic_string& y) +operator>=(const CharT* s, const basic_string& y) { return !(s < y); } -template +template inline bool -operator>=(const basic_string& x, const CharT* s) +operator>=(const basic_string& x, const CharT* s) { return !(x < s); } // Swap. -template -inline void swap(basic_string& x, basic_string& y) +template +inline void swap(basic_string& x, basic_string& y) { x.swap(y); } /// @cond @@ -2772,17 +2725,17 @@ string_fill(std::basic_ostream& os, } //namespace container_detail { /// @endcond -template +template std::basic_ostream& -operator<<(std::basic_ostream& os, const basic_string& s) +operator<<(std::basic_ostream& os, const basic_string& s) { typename std::basic_ostream::sentry sentry(os); bool ok = false; if (sentry) { ok = true; - typename basic_string::size_type n = s.size(); - typename basic_string::size_type pad_len = 0; + typename basic_string::size_type n = s.size(); + typename basic_string::size_type pad_len = 0; const bool left = (os.flags() & std::ios::left) != 0; const std::size_t w = os.width(0); std::basic_streambuf* buf = os.rdbuf(); @@ -2807,9 +2760,9 @@ operator<<(std::basic_ostream& os, const basic_string +template std::basic_istream& -operator>>(std::basic_istream& is, basic_string& s) +operator>>(std::basic_istream& is, basic_string& s) { typename std::basic_istream::sentry sentry(is); @@ -2854,11 +2807,11 @@ operator>>(std::basic_istream& is, basic_string& return is; } -template +template std::basic_istream& -getline(std::istream& is, basic_string& s,CharT delim) +getline(std::istream& is, basic_string& s,CharT delim) { - typename basic_string::size_type nread = 0; + typename basic_string::size_type nread = 0; typename std::basic_istream::sentry sentry(is, true); if (sentry) { std::basic_streambuf* buf = is.rdbuf(); @@ -2886,15 +2839,15 @@ getline(std::istream& is, basic_string& s,CharT delim) return is; } -template +template inline std::basic_istream& -getline(std::basic_istream& is, basic_string& s) +getline(std::basic_istream& is, basic_string& s) { return getline(is, s, '\n'); } -template -inline std::size_t hash_value(basic_string, A> const& v) +template +inline std::size_t hash_value(basic_string, Allocator> const& v) { return hash_range(v.begin(), v.end()); } @@ -2907,10 +2860,10 @@ namespace boost { /* //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value; }; */ } diff --git a/3party/boost/boost/container/vector.hpp b/3party/boost/boost/container/vector.hpp index c6e5b51c30..972db9ecc0 100644 --- a/3party/boost/boost/container/vector.hpp +++ b/3party/boost/boost/container/vector.hpp @@ -86,7 +86,7 @@ class vector_const_iterator { return *m_ptr; } const value_type * operator->() const - { return container_detail::to_raw_pointer(m_ptr); } + { return container_detail::to_raw_pointer(m_ptr); } reference operator[](difference_type off) const { return m_ptr[off]; } @@ -207,11 +207,11 @@ class vector_iterator { return static_cast&>(*this) - right; } }; -template +template struct vector_value_traits { typedef T value_type; - typedef A allocator_type; + typedef Allocator allocator_type; static const bool trivial_dctr = boost::has_trivial_destructor::value; static const bool trivial_dctr_after_move = trivial_dctr; //::boost::has_trivial_destructor_after_move::value || trivial_dctr; @@ -229,37 +229,37 @@ struct vector_value_traits //to deallocate values already constructed typedef typename container_detail::if_c - ,container_detail::scoped_destructor_n + ,container_detail::null_scoped_destructor_n + ,container_detail::scoped_destructor_n >::type OldArrayDestructor; //This is the anti-exception array destructor //to destroy objects created with copy construction typedef typename container_detail::if_c - ,container_detail::scoped_destructor_n + ,container_detail::null_scoped_destructor_n + ,container_detail::scoped_destructor_n >::type ArrayDestructor; //This is the anti-exception array deallocator typedef typename container_detail::if_c - ,container_detail::scoped_array_deallocator + ,container_detail::null_scoped_array_deallocator + ,container_detail::scoped_array_deallocator >::type ArrayDeallocator; }; //!This struct deallocates and allocated memory -template +template struct vector_alloc_holder { - typedef boost::container::allocator_traits allocator_traits_type; + typedef boost::container::allocator_traits allocator_traits_type; typedef typename allocator_traits_type::pointer pointer; typedef typename allocator_traits_type::size_type size_type; typedef typename allocator_traits_type::value_type value_type; - typedef vector_value_traits value_traits; + typedef vector_value_traits value_traits; //Constructor, does not throw vector_alloc_holder() - BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor::value) + BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor::value) : members_() {} @@ -279,7 +279,7 @@ struct vector_alloc_holder typedef container_detail::integral_constant allocator_v1; typedef container_detail::integral_constant allocator_v2; typedef container_detail::integral_constant::value> alloc_version; + boost::container::container_detail::version::value> alloc_version; std::pair allocation_command(allocation_type command, size_type limit_size, @@ -325,7 +325,7 @@ struct vector_alloc_holder } struct members_holder - : public A + : public Allocator { private: members_holder(const members_holder&); @@ -333,11 +333,11 @@ struct vector_alloc_holder public: template explicit members_holder(BOOST_FWD_REF(Alloc) alloc) - : A(boost::forward(alloc)), m_start(0), m_size(0), m_capacity(0) + : Allocator(boost::forward(alloc)), m_start(0), m_size(0), m_capacity(0) {} members_holder() - : A(), m_start(0), m_size(0), m_capacity(0) + : Allocator(), m_start(0), m_size(0), m_capacity(0) {} pointer m_start; @@ -352,10 +352,10 @@ struct vector_alloc_holder container_detail::do_swap(this->members_.m_capacity, x.members_.m_capacity); } - A &alloc() + Allocator &alloc() { return members_; } - const A &alloc() const + const Allocator &alloc() const { return members_; } protected: @@ -401,53 +401,42 @@ struct vector_alloc_holder //! boost::container::vector is similar to std::vector but it's compatible //! with shared memory and memory mapped files. #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED -template > +template > #else -template +template #endif -class vector : private container_detail::vector_alloc_holder +class vector : private container_detail::vector_alloc_holder { /// @cond - typedef vector self_t; - typedef container_detail::vector_alloc_holder base_t; - typedef allocator_traits allocator_traits_type; + typedef container_detail::vector_alloc_holder base_t; + typedef allocator_traits allocator_traits_type; /// @endcond public: - //! The type of object, T, stored in the vector - typedef T value_type; - //! Pointer to T - typedef typename allocator_traits_type::pointer pointer; - //! Const pointer to T - typedef typename allocator_traits_type::const_pointer const_pointer; - //! Reference to T - typedef typename allocator_traits_type::reference reference; - //! Const reference to T - typedef typename allocator_traits_type::const_reference const_reference; - //! An unsigned integral type - typedef typename allocator_traits_type::size_type size_type; - //! A signed integral type - typedef typename allocator_traits_type::difference_type difference_type; - //! The allocator type - typedef A allocator_type; - //! The random access iterator - typedef container_detail::vector_iterator iterator; - //! The random access const_iterator - typedef container_detail::vector_const_iterator const_iterator; + ////////////////////////////////////////////// + // + // types + // + ////////////////////////////////////////////// - //! Iterator used to iterate backwards through a vector. - typedef std::reverse_iterator - reverse_iterator; - //! Const iterator used to iterate backwards through a vector. - typedef std::reverse_iterator - const_reverse_iterator; - //! The stored allocator type - typedef allocator_type stored_allocator_type; + typedef T value_type; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; + typedef Allocator allocator_type; + typedef Allocator stored_allocator_type; + typedef BOOST_CONTAINER_IMPDEF(container_detail::vector_iterator) iterator; + typedef BOOST_CONTAINER_IMPDEF(container_detail::vector_const_iterator) const_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) reverse_iterator; + typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator) const_reverse_iterator; /// @cond private: BOOST_COPYABLE_AND_MOVABLE(vector) typedef container_detail::advanced_insert_aux_int advanced_insert_aux_int_t; - typedef container_detail::vector_value_traits value_traits; + typedef container_detail::vector_value_traits value_traits; typedef typename base_t::allocator_v1 allocator_v1; typedef typename base_t::allocator_v2 allocator_v2; @@ -459,6 +448,11 @@ class vector : private container_detail::vector_alloc_holder /// @endcond public: + ////////////////////////////////////////////// + // + // construct/copy/destroy + // + ////////////////////////////////////////////// //! Effects: Constructs a vector taking the allocator as parameter. //! @@ -466,7 +460,7 @@ class vector : private container_detail::vector_alloc_holder //! //! Complexity: Constant. vector() - BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor::value) + BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor::value) : base_t() {} @@ -475,7 +469,7 @@ class vector : private container_detail::vector_alloc_holder //! Throws: Nothing //! //! Complexity: Constant. - explicit vector(const A& a) BOOST_CONTAINER_NOEXCEPT + explicit vector(const Allocator& a) BOOST_CONTAINER_NOEXCEPT : base_t(a) {} @@ -488,23 +482,7 @@ class vector : private container_detail::vector_alloc_holder //! Complexity: Linear to n. explicit vector(size_type n) : base_t() - { - //Allocate - size_type real_cap; - std::pair ret = - this->allocation_command(allocate_new, n, n, real_cap, this->members_.m_start); - T *new_mem = container_detail::to_raw_pointer(ret.first); - //Anti-exception rollback - typename value_traits::ArrayDeallocator scoped_alloc(new_mem, this->alloc(), real_cap); - //Default constructor - container_detail::default_construct_aux_proxy proxy(this->alloc(), n); - proxy.uninitialized_copy_remaining_to(new_mem); - //All ok, commit - this->members_.m_start = ret.first; - this->members_.m_size = n; - this->members_.m_capacity = real_cap; - scoped_alloc.release(); - } + { this->resize(n); } //! Effects: Constructs a vector that will use a copy of allocator a //! and inserts n copies of value. @@ -515,7 +493,19 @@ class vector : private container_detail::vector_alloc_holder //! Complexity: Linear to n. vector(size_type n, const T& value, const allocator_type& a = allocator_type()) : base_t(a) - { this->insert(this->cend(), n, value); } + { this->resize(n, value); } + + //! Effects: Constructs a vector that will use a copy of allocator a + //! and inserts a copy of the range [first, last) in the vector. + //! + //! Throws: If allocator_type's default constructor or allocation + //! throws or T's constructor taking an dereferenced InIt throws. + //! + //! Complexity: Linear to the range [first, last). + template + vector(InIt first, InIt last, const allocator_type& a = allocator_type()) + : base_t(a) + { this->assign(first, last); } //! Effects: Copy constructs a vector. //! @@ -571,22 +561,10 @@ class vector : private container_detail::vector_alloc_holder } else{ this->assign( container_detail::to_raw_pointer(mx.members_.m_start) - , container_detail::to_raw_pointer(mx.members_.m_start + mx.members_.m_size)); + , container_detail::to_raw_pointer(mx.members_.m_start) + mx.members_.m_size); } } - //! Effects: Constructs a vector that will use a copy of allocator a - //! and inserts a copy of the range [first, last) in the vector. - //! - //! Throws: If allocator_type's default constructor or allocation - //! throws or T's constructor taking an dereferenced InIt throws. - //! - //! Complexity: Linear to the range [first, last). - template - vector(InIt first, InIt last, const allocator_type& a = allocator_type()) - : base_t(a) - { this->assign(first, last); } - //! Effects: Destroys the vector. All stored values are destroyed //! and used memory is deallocated. //! @@ -596,6 +574,142 @@ class vector : private container_detail::vector_alloc_holder ~vector() BOOST_CONTAINER_NOEXCEPT {} //vector_alloc_holder clears the data + //! Effects: Makes *this contain the same elements as x. + //! + //! Postcondition: this->size() == x.size(). *this contains a copy + //! of each of x's elements. + //! + //! Throws: If memory allocation throws or T's copy/move constructor/assignment throws. + //! + //! Complexity: Linear to the number of elements in x. + vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x) + { + if (&x != this){ + allocator_type &this_alloc = this->alloc(); + const allocator_type &x_alloc = x.alloc(); + container_detail::bool_ flag; + if(flag && this_alloc != x_alloc){ + this->clear(); + this->shrink_to_fit(); + } + container_detail::assign_alloc(this_alloc, x_alloc, flag); + this->assign( container_detail::to_raw_pointer(x.members_.m_start) + , container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size)); + } + return *this; + } + + //! Effects: Move assignment. All mx's values are transferred to *this. + //! + //! Postcondition: x.empty(). *this contains a the elements x had + //! before the function. + //! + //! Throws: Nothing + //! + //! Complexity: Linear. + vector& operator=(BOOST_RV_REF(vector) x) + //iG BOOST_CONTAINER_NOEXCEPT_IF(!allocator_type::propagate_on_container_move_assignment::value || is_nothrow_move_assignable::value);) + BOOST_CONTAINER_NOEXCEPT + { + if (&x != this){ + allocator_type &this_alloc = this->alloc(); + allocator_type &x_alloc = x.alloc(); + //If allocators are equal we can just swap pointers + if(this_alloc == x_alloc){ + //Destroy objects but retain memory in case x reuses it in the future + this->clear(); + this->swap_members(x); + //Move allocator if needed + container_detail::bool_ flag; + container_detail::move_alloc(this_alloc, x_alloc, flag); + } + //If unequal allocators, then do a one by one move + else{ + this->assign( boost::make_move_iterator(container_detail::to_raw_pointer(x.members_.m_start)) + , boost::make_move_iterator(container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size))); + } + } + return *this; + } + + //! Effects: Assigns the the range [first, last) to *this. + //! + //! Throws: If memory allocation throws or T's copy/move constructor/assignment or + //! T's constructor/assignment from dereferencing InpIt throws. + //! + //! Complexity: Linear to n. + template + void assign(InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + //&& container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) + { + //Overwrite all elements we can from [first, last) + iterator cur = this->begin(); + for ( ; first != last && cur != end(); ++cur, ++first){ + *cur = *first; + } + + if (first == last){ + //There are no more elements in the sequence, erase remaining + this->erase(cur, this->cend()); + } + else{ + //There are more elements in the range, insert the remaining ones + this->insert(this->cend(), first, last); + } + } + + //! Effects: Assigns the n copies of val to *this. + //! + //! Throws: If memory allocation throws or + //! T's copy/move constructor/assignment throws. + //! + //! Complexity: Linear to n. + void assign(size_type n, const value_type& val) + { this->assign(cvalue_iterator(val, n), cvalue_iterator()); } + + //! Effects: Returns a copy of the internal allocator. + //! + //! Throws: If allocator's copy constructor throws. + //! + //! Complexity: Constant. + allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT + { return this->alloc(); } + + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT + { return this->alloc(); } + + //! Effects: Returns a reference to the internal allocator. + //! + //! Throws: Nothing + //! + //! Complexity: Constant. + //! + //! Note: Non-standard extension. + const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT + { return this->alloc(); } + + ////////////////////////////////////////////// + // + // iterators + // + ////////////////////////////////////////////// + //! Effects: Returns an iterator to the first element contained in the vector. //! //! Throws: Nothing. @@ -698,6 +812,160 @@ class vector : private container_detail::vector_alloc_holder const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT { return const_reverse_iterator(this->begin()); } + ////////////////////////////////////////////// + // + // capacity + // + ////////////////////////////////////////////// + + //! Effects: Returns true if the vector contains no elements. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + bool empty() const BOOST_CONTAINER_NOEXCEPT + { return !this->members_.m_size; } + + //! Effects: Returns the number of the elements contained in the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type size() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_size; } + + //! Effects: Returns the largest possible size of the vector. + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type max_size() const BOOST_CONTAINER_NOEXCEPT + { return allocator_traits_type::max_size(this->alloc()); } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are default constructed. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size) + { + if (new_size < this->size()){ + //Destroy last elements + this->erase(const_iterator(this->members_.m_start + new_size), this->end()); + } + else{ + const size_type n = new_size - this->size(); + this->reserve(new_size); + container_detail::default_construct_aux_proxy proxy(this->alloc(), n); + this->priv_forward_range_insert(this->cend().get_ptr(), n, proxy); + } + } + + //! Effects: Inserts or erases elements at the end such that + //! the size becomes n. New elements are copy constructed from x. + //! + //! Throws: If memory allocation throws, or T's copy constructor throws. + //! + //! Complexity: Linear to the difference between size() and new_size. + void resize(size_type new_size, const T& x) + { + pointer finish = this->members_.m_start + this->members_.m_size; + if (new_size < size()){ + //Destroy last elements + this->erase(const_iterator(this->members_.m_start + new_size), this->end()); + } + else{ + //Insert new elements at the end + this->insert(const_iterator(finish), new_size - this->size(), x); + } + } + + //! Effects: Number of elements for which memory has been allocated. + //! capacity() is always greater than or equal to size(). + //! + //! Throws: Nothing. + //! + //! Complexity: Constant. + size_type capacity() const BOOST_CONTAINER_NOEXCEPT + { return this->members_.m_capacity; } + + //! Effects: If n is less than or equal to capacity(), this call has no + //! effect. Otherwise, it is a request for allocation of additional memory. + //! If the request is successful, then capacity() is greater than or equal to + //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. + //! + //! Throws: If memory allocation allocation throws or T's copy/move constructor throws. + void reserve(size_type new_cap) + { + if (this->capacity() < new_cap){ + //There is not enough memory, allocate a new + //buffer or expand the old one. + bool same_buffer_start; + size_type real_cap = 0; + std::pair ret = + this->allocation_command + (allocate_new | expand_fwd | expand_bwd, + new_cap, new_cap, real_cap, this->members_.m_start); + + //Check for forward expansion + same_buffer_start = ret.second && this->members_.m_start == ret.first; + if(same_buffer_start){ + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS + ++this->num_expand_fwd; + #endif + this->members_.m_capacity = real_cap; + } + + //If there is no forward expansion, move objects + else{ + //We will reuse insert code, so create a dummy input iterator + T *dummy_it(container_detail::to_raw_pointer(this->members_.m_start)); + container_detail::advanced_insert_aux_proxy, T*> + proxy(this->alloc(), ::boost::make_move_iterator(dummy_it), ::boost::make_move_iterator(dummy_it)); + //Backwards (and possibly forward) expansion + if(ret.second){ + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS + ++this->num_expand_bwd; + #endif + this->priv_range_insert_expand_backwards + ( container_detail::to_raw_pointer(ret.first) + , real_cap + , container_detail::to_raw_pointer(this->members_.m_start) + , 0 + , proxy); + } + //New buffer + else{ + #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS + ++this->num_alloc; + #endif + this->priv_range_insert_new_allocation + ( container_detail::to_raw_pointer(ret.first) + , real_cap + , container_detail::to_raw_pointer(this->members_.m_start) + , 0 + , proxy); + } + } + } + } + + //! Effects: Tries to deallocate the excess of memory created + //! with previous allocations. The size of the vector is unchanged + //! + //! Throws: If memory allocation throws, or T's copy/move constructor throws. + //! + //! Complexity: Linear to size(). + void shrink_to_fit() + { this->priv_shrink_to_fit(alloc_version()); } + + ////////////////////////////////////////////// + // + // element access + // + ////////////////////////////////////////////// + //! Requires: !empty() //! //! Effects: Returns a reference to the first @@ -742,57 +1010,6 @@ class vector : private container_detail::vector_alloc_holder const_reference back() const BOOST_CONTAINER_NOEXCEPT { return this->members_.m_start[this->members_.m_size - 1]; } - //! Returns: A pointer such that [data(),data() + size()) is a valid range. - //! For a non-empty vector, data() == &front(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - pointer data() BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_start; } - - //! Returns: A pointer such that [data(),data() + size()) is a valid range. - //! For a non-empty vector, data() == &front(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - const_pointer data() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_start; } - - //! Effects: Returns the number of the elements contained in the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type size() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_size; } - - //! Effects: Returns the largest possible size of the vector. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type max_size() const BOOST_CONTAINER_NOEXCEPT - { return allocator_traits_type::max_size(this->alloc()); } - - //! Effects: Number of elements for which memory has been allocated. - //! capacity() is always greater than or equal to size(). - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - size_type capacity() const BOOST_CONTAINER_NOEXCEPT - { return this->members_.m_capacity; } - - //! Effects: Returns true if the vector contains no elements. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - bool empty() const BOOST_CONTAINER_NOEXCEPT - { return !this->members_.m_size; } - //! Requires: size() > n. //! //! Effects: Returns a reference to the nth element @@ -837,178 +1054,118 @@ class vector : private container_detail::vector_alloc_holder const_reference at(size_type n) const { this->priv_check_range(n); return this->members_.m_start[n]; } - //! Effects: Returns a copy of the internal allocator. + ////////////////////////////////////////////// + // + // data access + // + ////////////////////////////////////////////// + + //! Returns: Allocator pointer such that [data(),data() + size()) is a valid range. + //! For a non-empty vector, data() == &front(). //! - //! Throws: If allocator's copy constructor throws. + //! Throws: Nothing. //! //! Complexity: Constant. - allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT - { return this->alloc(); } + T* data() BOOST_CONTAINER_NOEXCEPT + { return container_detail::to_raw_pointer(this->members_.m_start); } - //! Effects: Returns a reference to the internal allocator. + //! Returns: Allocator pointer such that [data(),data() + size()) is a valid range. + //! For a non-empty vector, data() == &front(). //! - //! Throws: Nothing + //! Throws: Nothing. //! //! Complexity: Constant. - //! - //! Note: Non-standard extension. - const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT - { return this->alloc(); } + const T * data() const BOOST_CONTAINER_NOEXCEPT + { return container_detail::to_raw_pointer(this->members_.m_start); } - //! Effects: Returns a reference to the internal allocator. - //! - //! Throws: Nothing - //! - //! Complexity: Constant. - //! - //! Note: Non-standard extension. - stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT - { return this->alloc(); } + ////////////////////////////////////////////// + // + // modifiers + // + ////////////////////////////////////////////// - //! Effects: If n is less than or equal to capacity(), this call has no - //! effect. Otherwise, it is a request for allocation of additional memory. - //! If the request is successful, then capacity() is greater than or equal to - //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. + #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... in the end of the vector. //! - //! Throws: If memory allocation allocation throws or T's copy/move constructor throws. - void reserve(size_type new_cap) + //! Throws: If memory allocation throws or the in-place constructor throws or + //! T's move constructor throws. + //! + //! Complexity: Amortized constant time. + template + void emplace_back(Args &&...args) { - if (this->capacity() < new_cap){ - //There is not enough memory, allocate a new - //buffer or expand the old one. - bool same_buffer_start; - size_type real_cap = 0; - std::pair ret = - this->allocation_command - (allocate_new | expand_fwd | expand_bwd, - new_cap, new_cap, real_cap, this->members_.m_start); - - //Check for forward expansion - same_buffer_start = ret.second && this->members_.m_start == ret.first; - if(same_buffer_start){ - #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS - ++this->num_expand_fwd; - #endif - this->members_.m_capacity = real_cap; - } - - //If there is no forward expansion, move objects - else{ - //We will reuse insert code, so create a dummy input iterator - T *dummy_it(container_detail::to_raw_pointer(this->members_.m_start)); - container_detail::advanced_insert_aux_proxy, T*> - proxy(this->alloc(), ::boost::make_move_iterator(dummy_it), ::boost::make_move_iterator(dummy_it)); - //Backwards (and possibly forward) expansion - if(ret.second){ - #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS - ++this->num_expand_bwd; - #endif - this->priv_range_insert_expand_backwards - ( container_detail::to_raw_pointer(ret.first) - , real_cap - , container_detail::to_raw_pointer(this->members_.m_start) - , 0 - , proxy); - } - //New buffer - else{ - #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS - ++this->num_alloc; - #endif - this->priv_range_insert_new_allocation - ( container_detail::to_raw_pointer(ret.first) - , real_cap - , container_detail::to_raw_pointer(this->members_.m_start) - , 0 - , proxy); - } - } + T* back_pos = container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size; + if (this->members_.m_size < this->members_.m_capacity){ + //There is more memory, just construct a new object at the end + allocator_traits_type::construct(this->alloc(), back_pos, ::boost::forward(args)...); + ++this->members_.m_size; + } + else{ + typedef container_detail::advanced_insert_aux_emplace type; + type &&proxy = type(this->alloc(), ::boost::forward(args)...); + this->priv_forward_range_insert(back_pos, 1, proxy); } } - //! Effects: Makes *this contain the same elements as x. + //! Requires: position must be a valid iterator of *this. //! - //! Postcondition: this->size() == x.size(). *this contains a copy - //! of each of x's elements. + //! Effects: Inserts an object of type T constructed with + //! std::forward(args)... before position //! - //! Throws: If memory allocation throws or T's copy/move constructor/assignment throws. + //! Throws: If memory allocation throws or the in-place constructor throws or + //! T's move constructor/assignment throws. //! - //! Complexity: Linear to the number of elements in x. - vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x) + //! Complexity: If position is end(), amortized constant time + //! Linear time otherwise. + template + iterator emplace(const_iterator position, Args && ...args) { - if (&x != this){ - allocator_type &this_alloc = this->alloc(); - const allocator_type &x_alloc = x.alloc(); - container_detail::bool_ flag; - if(flag && this_alloc != x_alloc){ - this->clear(); - this->shrink_to_fit(); - } - container_detail::assign_alloc(this_alloc, x_alloc, flag); - this->assign( container_detail::to_raw_pointer(x.members_.m_start) - , container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size)); - } - return *this; + //Just call more general insert(pos, size, value) and return iterator + size_type pos_n = position - cbegin(); + typedef container_detail::advanced_insert_aux_emplace type; + type &&proxy = type(this->alloc(), ::boost::forward(args)...); + this->priv_forward_range_insert(position.get_ptr(), 1, proxy); + return iterator(this->members_.m_start + pos_n); } - //! Effects: Move assignment. All mx's values are transferred to *this. - //! - //! Postcondition: x.empty(). *this contains a the elements x had - //! before the function. - //! - //! Throws: Nothing - //! - //! Complexity: Linear. - vector& operator=(BOOST_RV_REF(vector) x) - //iG BOOST_CONTAINER_NOEXCEPT_IF(!allocator_type::propagate_on_container_move_assignment::value || is_nothrow_move_assignable::value);) - BOOST_CONTAINER_NOEXCEPT - { - if (&x != this){ - allocator_type &this_alloc = this->alloc(); - allocator_type &x_alloc = x.alloc(); - //If allocators are equal we can just swap pointers - if(this_alloc == x_alloc){ - //Destroy objects but retain memory in case x reuses it in the future - this->clear(); - this->swap_members(x); - //Move allocator if needed - container_detail::bool_ flag; - container_detail::move_alloc(this_alloc, x_alloc, flag); - } - //If unequal allocators, then do a one by one move - else{ - this->assign( boost::make_move_iterator(container_detail::to_raw_pointer(x.members_.m_start)) - , boost::make_move_iterator(container_detail::to_raw_pointer(x.members_.m_start + x.members_.m_size))); - } - } - return *this; - } + #else - //! Effects: Assigns the n copies of val to *this. + #define BOOST_PP_LOCAL_MACRO(n) \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + T* back_pos = container_detail::to_raw_pointer \ + (this->members_.m_start) + this->members_.m_size; \ + if (this->members_.m_size < this->members_.m_capacity){ \ + allocator_traits_type::construct (this->alloc() \ + , back_pos BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ + ++this->members_.m_size; \ + } \ + else{ \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + this->priv_forward_range_insert(back_pos, 1, proxy); \ + } \ + } \ + \ + BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ + iterator emplace(const_iterator pos \ + BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ + { \ + size_type pos_n = pos - cbegin(); \ + container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ + proxy \ + (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ + this->priv_forward_range_insert(container_detail::to_raw_pointer(pos.get_ptr()), 1,proxy);\ + return iterator(this->members_.m_start + pos_n); \ + } \ //! - //! Throws: If memory allocation throws or - //! T's copy/move constructor/assignment throws. - //! - //! Complexity: Linear to n. - void assign(size_type n, const value_type& val) - { this->assign(cvalue_iterator(val, n), cvalue_iterator()); } + #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) + #include BOOST_PP_LOCAL_ITERATE() - //! Effects: Assigns the the range [first, last) to *this. - //! - //! Throws: If memory allocation throws or T's copy/move constructor/assignment or - //! T's constructor/assignment from dereferencing InpIt throws. - //! - //! Complexity: Linear to n. - template - void assign(InIt first, InIt last) - { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_assign_dispatch(first, last, Result()); - } + #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: Inserts a copy of x at the end of the vector. @@ -1030,104 +1187,7 @@ class vector : private container_detail::vector_alloc_holder #else BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back) #endif - - #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... in the end of the vector. - //! - //! Throws: If memory allocation throws or the in-place constructor throws or - //! T's move constructor throws. - //! - //! Complexity: Amortized constant time. - template - void emplace_back(Args &&...args) - { - T* back_pos = container_detail::to_raw_pointer(this->members_.m_start) + this->members_.m_size; - if (this->members_.m_size < this->members_.m_capacity){ - //There is more memory, just construct a new object at the end - allocator_traits_type::construct(this->alloc(), back_pos, ::boost::forward(args)...); - ++this->members_.m_size; - } - else{ - typedef container_detail::advanced_insert_aux_emplace type; - type &&proxy = type(this->alloc(), ::boost::forward(args)...); - priv_range_insert(back_pos, 1, proxy); - } - } - - //! Requires: position must be a valid iterator of *this. - //! - //! Effects: Inserts an object of type T constructed with - //! std::forward(args)... before position - //! - //! Throws: If memory allocation throws or the in-place constructor throws or - //! T's move constructor/assignment throws. - //! - //! Complexity: If position is end(), amortized constant time - //! Linear time otherwise. - template - iterator emplace(const_iterator position, Args && ...args) - { - //Just call more general insert(pos, size, value) and return iterator - size_type pos_n = position - cbegin(); - typedef container_detail::advanced_insert_aux_emplace type; - type &&proxy = type(this->alloc(), ::boost::forward(args)...); - priv_range_insert(position.get_ptr(), 1, proxy); - return iterator(this->members_.m_start + pos_n); - } - - #else - - #define BOOST_PP_LOCAL_MACRO(n) \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { \ - T* back_pos = container_detail::to_raw_pointer \ - (this->members_.m_start) + this->members_.m_size; \ - if (this->members_.m_size < this->members_.m_capacity){ \ - allocator_traits_type::construct (this->alloc() \ - , back_pos BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \ - ++this->members_.m_size; \ - } \ - else{ \ - container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - proxy \ - (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ - priv_range_insert(back_pos, 1, proxy); \ - } \ - } \ - \ - BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \ - iterator emplace(const_iterator pos \ - BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \ - { \ - size_type pos_n = pos - cbegin(); \ - container_detail::BOOST_PP_CAT(BOOST_PP_CAT(advanced_insert_aux_emplace, n), arg) \ - proxy \ - (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \ - priv_range_insert(container_detail::to_raw_pointer(pos.get_ptr()), 1, proxy); \ - return iterator(this->members_.m_start + pos_n); \ - } \ - //! - #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS) - #include BOOST_PP_LOCAL_ITERATE() - - #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING - //! Effects: Swaps the contents of *this and x. - //! - //! Throws: Nothing. - //! - //! Complexity: Constant. - void swap(vector& x) - { - //Just swap internals - this->swap_members(x); - //And now the allocator - container_detail::bool_ flag; - container_detail::swap_alloc(this->alloc(), x.alloc(), flag); - } - #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Requires: position must be a valid iterator of *this. //! @@ -1152,32 +1212,63 @@ class vector : private container_detail::vector_alloc_holder BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator) #endif - //! Requires: pos must be a valid iterator of *this. + //! Requires: p must be a valid iterator of *this. + //! + //! Effects: Insert n copies of x before pos. + //! + //! Returns: an iterator to the first inserted element or p if n is 0. + //! + //! Throws: If memory allocation throws or T's copy constructor throws. + //! + //! Complexity: Linear to n. + iterator insert(const_iterator p, size_type n, const T& x) + { return this->insert(p, cvalue_iterator(x, n), cvalue_iterator()); } + + //! Requires: p must be a valid iterator of *this. //! //! Effects: Insert a copy of the [first, last) range before pos. //! + //! Returns: an iterator to the first inserted element or pos if first == last. + //! //! Throws: If memory allocation throws, T's constructor from a //! dereferenced InpIt throws or T's copy/move constructor/assignment throws. //! //! Complexity: Linear to std::distance [first, last). template - void insert(const_iterator pos, InIt first, InIt last) + iterator insert(const_iterator pos, InIt first, InIt last + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && container_detail::is_input_iterator::value + >::type * = 0 + #endif + ) { - //Dispatch depending on integer/iterator - const bool aux_boolean = container_detail::is_convertible::value; - typedef container_detail::bool_ Result; - this->priv_insert_dispatch(pos, first, last, Result()); + const size_type n_pos = pos - this->cbegin(); + iterator it(pos.get_ptr()); + for(;first != last; ++first){ + it = this->emplace(it, *first); + ++it; + } + return this->begin() + n_pos; } - //! Requires: pos must be a valid iterator of *this. - //! - //! Effects: Insert n copies of x before pos. - //! - //! Throws: If memory allocation throws or T's copy constructor throws. - //! - //! Complexity: Linear to n. - void insert(const_iterator p, size_type n, const T& x) - { this->insert(p, cvalue_iterator(x, n), cvalue_iterator()); } + #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + template + iterator insert(const_iterator pos, FwdIt first, FwdIt last + , typename container_detail::enable_if_c + < !container_detail::is_convertible::value + && !container_detail::is_input_iterator::value + >::type * = 0 + ) + { + const size_type n_pos = pos - this->cbegin(); + const size_type n = std::distance(first, last); + container_detail::advanced_insert_aux_proxy proxy(this->alloc(), first, last); + this->priv_forward_range_insert(pos.get_ptr(), n, proxy); + return this->begin() + n_pos; + } + #endif //! Effects: Removes the last element from the vector. //! @@ -1230,43 +1321,18 @@ class vector : private container_detail::vector_alloc_holder return iterator(first.get_ptr()); } - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are copy constructed from x. + //! Effects: Swaps the contents of *this and x. //! - //! Throws: If memory allocation throws, or T's copy constructor throws. + //! Throws: Nothing. //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size, const T& x) + //! Complexity: Constant. + void swap(vector& x) { - pointer finish = this->members_.m_start + this->members_.m_size; - if (new_size < size()){ - //Destroy last elements - this->erase(const_iterator(this->members_.m_start + new_size), this->end()); - } - else{ - //Insert new elements at the end - this->insert(const_iterator(finish), new_size - this->size(), x); - } - } - - //! Effects: Inserts or erases elements at the end such that - //! the size becomes n. New elements are default constructed. - //! - //! Throws: If memory allocation throws, or T's copy constructor throws. - //! - //! Complexity: Linear to the difference between size() and new_size. - void resize(size_type new_size) - { - if (new_size < this->size()){ - //Destroy last elements - this->erase(const_iterator(this->members_.m_start + new_size), this->end()); - } - else{ - size_type n = new_size - this->size(); - this->reserve(new_size); - container_detail::default_construct_aux_proxy proxy(this->alloc(), n); - priv_range_insert(this->cend().get_ptr(), n, proxy); - } + //Just swap internals + this->swap_members(x); + //And now the allocator + container_detail::bool_ flag; + container_detail::swap_alloc(this->alloc(), x.alloc(), flag); } //! Effects: Erases all the elements of the vector. @@ -1277,15 +1343,6 @@ class vector : private container_detail::vector_alloc_holder void clear() BOOST_CONTAINER_NOEXCEPT { this->prot_destroy_all(); } - //! Effects: Tries to deallocate the excess of memory created - //! with previous allocations. The size of the vector is unchanged - //! - //! Throws: If memory allocation throws, or T's copy/move constructor throws. - //! - //! Complexity: Linear to size(). - void shrink_to_fit() - { priv_shrink_to_fit(alloc_version()); } - /// @cond //Absolutely experimental. This function might change, disappear or simply crash! @@ -1338,13 +1395,10 @@ class vector : private container_detail::vector_alloc_holder } } - template - void priv_shrink_to_fit( AllocVersion - , typename container_detail::enable_if_c< - container_detail::is_same::value >::type * = 0) + void priv_shrink_to_fit(allocator_v1) { if(this->members_.m_capacity){ - if(!size()){ + if(!this->size()){ this->prot_deallocate(); } else{ @@ -1356,7 +1410,7 @@ class vector : private container_detail::vector_alloc_holder if(real_cap < this->capacity()){ //We will reuse insert code, so create a dummy input iterator T *dummy_it(container_detail::to_raw_pointer(this->members_.m_start)); - container_detail::advanced_insert_aux_proxy, T*> + container_detail::advanced_insert_aux_proxy, T*> proxy(this->alloc(), ::boost::make_move_iterator(dummy_it), ::boost::make_move_iterator(dummy_it)); #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS ++this->num_alloc; @@ -1375,10 +1429,7 @@ class vector : private container_detail::vector_alloc_holder } } - template - void priv_shrink_to_fit(AllocVersion - , typename container_detail::enable_if_c< - !container_detail::is_same::value >::type * = 0) + void priv_shrink_to_fit(allocator_v2) { if(this->members_.m_capacity){ if(!size()){ @@ -1386,7 +1437,7 @@ class vector : private container_detail::vector_alloc_holder } else{ size_type received_size; - if(this->alloc().allocation_command + if(this->allocation_command ( shrink_in_place | nothrow_allocation , this->capacity(), this->size() , received_size, this->members_.m_start).first){ @@ -1399,25 +1450,7 @@ class vector : private container_detail::vector_alloc_holder } } - template - void priv_range_insert(const_iterator pos, FwdIt first, FwdIt last, std::forward_iterator_tag) - { - if(first != last){ - const size_type n = std::distance(first, last); - container_detail::advanced_insert_aux_proxy proxy(this->alloc(), first, last); - priv_range_insert(pos.get_ptr(), n, proxy); - } - } - - template - void priv_range_insert(const_iterator pos, InIt first, InIt last, std::input_iterator_tag) - { - for(;first != last; ++first){ - this->emplace(pos, *first); - } - } - - void priv_range_insert(pointer pos, const size_type n, advanced_insert_aux_int_t &interf) + void priv_forward_range_insert(pointer pos, const size_type n, advanced_insert_aux_int_t &interf) { //Check if we have enough memory or try to expand current memory size_type remaining = this->members_.m_capacity - this->members_.m_size; @@ -1497,6 +1530,10 @@ class vector : private container_detail::vector_alloc_holder //Loop for each insertion backwards, first moving the elements after the insertion point, //then inserting the element. while(insertions_left){ + if(do_skip){ + size_type n = *(--last_skip_it); + std::advance(last_value_it, -difference_type(n)); + } const size_type pos = static_cast(*(--last_position_it)); BOOST_ASSERT(pos <= old_size_pos); //If needed shift the range after the insertion point and the previous insertion point. @@ -1531,12 +1568,6 @@ class vector : private container_detail::vector_alloc_holder //Insert the new value in the already constructed range begin_ptr[pos + insertions_left - 1] = *(--last_value_it); } - if(do_skip){ - size_type n = *(--last_skip_it); - while(n--){ - --last_value_it; - } - } --insertions_left; hole_size = new_hole_size; next_pos = pos; @@ -1561,10 +1592,10 @@ class vector : private container_detail::vector_alloc_holder //| prefix | range | suffix |raw_mem ~ //|____________|_______|__________________|_____________~ // - //New situation in Case A (hole_size == 0): + //New situation in Case Allocator (hole_size == 0): // range is moved through move assignments // - // first_pos last_pos old_limit + // first_pos last_pos limit_pos // | | | // ____________V_______V__________________V_____________ //| prefix' | | | range |suffix'|raw_mem ~ @@ -1573,10 +1604,10 @@ class vector : private container_detail::vector_alloc_holder // |_>_>_>_>_>^ // // - //New situation in Case B (hole_size >= 0): + //New situation in Case B (hole_size > 0): // range is moved through uninitialized moves // - // first_pos last_pos old_limit + // first_pos last_pos limit_pos // | | | // ____________V_______V__________________V________________ //| prefix' | | | [hole] | range | @@ -1587,31 +1618,33 @@ class vector : private container_detail::vector_alloc_holder //New situation in Case C (hole_size == 0): // range is moved through move assignments and uninitialized moves // - // first_pos last_pos old_limit + // first_pos last_pos limit_pos // | | | // ____________V_______V__________________V___ //| prefix' | | | range | //|___________________________________|___^___| // | | // |_>_>_>_>_>_>_>_>_>_>_>^ - size_type priv_insert_ordered_at_shift_range(size_type first_pos, size_type last_pos, size_type limit_pos, size_type shift_count) + size_type priv_insert_ordered_at_shift_range + (size_type first_pos, size_type last_pos, size_type limit_pos, size_type shift_count) { BOOST_ASSERT(first_pos <= last_pos); BOOST_ASSERT(last_pos <= limit_pos); // T* const begin_ptr = container_detail::to_raw_pointer(this->members_.m_start); + T* const first_ptr = begin_ptr + first_pos; + T* const last_ptr = begin_ptr + last_pos; size_type hole_size = 0; - //Case A: + //Case Allocator: if((last_pos + shift_count) <= limit_pos){ //All move assigned - boost::move_backward(begin_ptr + first_pos, begin_ptr + last_pos, begin_ptr + last_pos + shift_count); + boost::move_backward(first_ptr, last_ptr, last_ptr + shift_count); } //Case B: else if((first_pos + shift_count) >= limit_pos){ //All uninitialized_moved - ::boost::container::uninitialized_move_alloc - (this->alloc(), begin_ptr + first_pos, begin_ptr + last_pos, begin_ptr + first_pos + shift_count); + ::boost::container::uninitialized_move_alloc(this->alloc(), first_ptr, last_ptr, first_ptr + shift_count); hole_size = last_pos + shift_count - limit_pos; } //Case C: @@ -1619,10 +1652,9 @@ class vector : private container_detail::vector_alloc_holder //Some uninitialized_moved T* const limit_ptr = begin_ptr + limit_pos; T* const boundary_ptr = limit_ptr - shift_count; - ::boost::container::uninitialized_move_alloc - (this->alloc(), boundary_ptr, begin_ptr + last_pos, limit_ptr); + ::boost::container::uninitialized_move_alloc(this->alloc(), boundary_ptr, last_ptr, limit_ptr); //The rest is move assigned - boost::move_backward(begin_ptr + first_pos, boundary_ptr, limit_ptr); + boost::move_backward(first_ptr, boundary_ptr, limit_ptr); } return hole_size; } @@ -1999,173 +2031,10 @@ class vector : private container_detail::vector_alloc_holder } } - template - void priv_assign_aux(InIt first, InIt last, std::input_iterator_tag) - { - //Overwrite all elements we can from [first, last) - iterator cur = begin(); - for ( ; first != last && cur != end(); ++cur, ++first){ - *cur = *first; - } - - if (first == last){ - //There are no more elements in the sequence, erase remaining - this->erase(cur, cend()); - } - else{ - //There are more elements in the range, insert the remaining ones - this->insert(this->cend(), first, last); - } - } - - template - void priv_assign_aux(FwdIt first, FwdIt last, std::forward_iterator_tag) - { - size_type n = std::distance(first, last); - if(!n){ - this->prot_destroy_all(); - return; - } - //Check if we have enough memory or try to expand current memory - size_type remaining = this->members_.m_capacity - this->members_.m_size; - bool same_buffer_start; - std::pair ret; - size_type real_cap = this->members_.m_capacity; - - if (n <= remaining){ - same_buffer_start = true; - } - else{ - //There is not enough memory, allocate a new buffer - size_type new_cap = this->next_capacity(n); - ret = this->allocation_command - (allocate_new | expand_fwd | expand_bwd, - this->size() + n, new_cap, real_cap, this->members_.m_start); - same_buffer_start = ret.second && this->members_.m_start == ret.first; - if(same_buffer_start){ - this->members_.m_capacity = real_cap; - } - } - - if(same_buffer_start){ - T *start = container_detail::to_raw_pointer(this->members_.m_start); - if (this->size() >= n){ - //There is memory, but there are more old elements than new ones - //Overwrite old elements with new ones - std::copy(first, last, start); - //Destroy remaining old elements - this->destroy_n(start + n, this->members_.m_size - n); - this->members_.m_size = n; - } - else{ - //There is memory, but there are less old elements than new ones - //First overwrite some old elements with new ones - FwdIt mid = first; - std::advance(mid, this->size()); - // iG T *end = std::copy(first, mid, start); - T *end = std::copy(first, mid, start); - //Initialize the remaining new elements in the uninitialized memory - ::boost::container::uninitialized_copy_or_move_alloc(this->alloc(), mid, last, end); - this->members_.m_size = n; - } - } - else if(!ret.second){ - typename value_traits::ArrayDeallocator scoped_alloc(ret.first, this->alloc(), real_cap); - ::boost::container::uninitialized_copy_or_move_alloc(this->alloc(), first, last, container_detail::to_raw_pointer(ret.first)); - scoped_alloc.release(); - //Destroy and deallocate old buffer - if(this->members_.m_start != 0){ - this->destroy_n(container_detail::to_raw_pointer(this->members_.m_start), this->members_.m_size); - this->alloc().deallocate(this->members_.m_start, this->members_.m_capacity); - } - this->members_.m_start = ret.first; - this->members_.m_size = n; - this->members_.m_capacity = real_cap; - } - else{ - //Backwards expansion - //If anything goes wrong, this object will destroy old objects - T *old_start = container_detail::to_raw_pointer(this->members_.m_start); - size_type old_size = this->members_.m_size; - typename value_traits::OldArrayDestructor old_values_destroyer(old_start, this->alloc(), old_size); - //If something goes wrong size will be 0 - //but holding the whole buffer - this->members_.m_size = 0; - this->members_.m_start = ret.first; - this->members_.m_capacity = real_cap; - - //Backup old buffer data - size_type old_offset = old_start - container_detail::to_raw_pointer(ret.first); - size_type first_count = container_detail::min_value(n, old_offset); - - FwdIt mid = first; - std::advance(mid, first_count); - ::boost::container::uninitialized_copy_or_move_alloc - (this->alloc(), first, mid, container_detail::to_raw_pointer(ret.first)); - - if(old_offset > n){ - //All old elements will be destroyed by "old_values_destroyer" - this->members_.m_size = n; - } - else{ - //We have constructed objects from the new begin until - //the old end so release the rollback destruction - old_values_destroyer.release(); - this->members_.m_start = ret.first; - this->members_.m_size = first_count + old_size; - //Now overwrite the old values - size_type second_count = container_detail::min_value(old_size, n - first_count); - FwdIt mid2 = mid; - std::advance(mid2, second_count); - // iG std::copy(mid, mid2, old_start); - std::copy(mid, mid2, old_start); - - //Check if we still have to append elements in the - //uninitialized end - if(second_count == old_size){ - // iG std::copy(mid2, last, old_start + old_size); - std::copy(mid2, last, old_start + old_size); - } - else{ - //We have to destroy some old values - this->destroy_n - (old_start + second_count, old_size - second_count); - this->members_.m_size = n; - } - this->members_.m_size = n; - } - } - } - - template - void priv_assign_dispatch(Integer n, Integer val, container_detail::true_) - { this->assign((size_type) n, (value_type)val); } - - template - void priv_assign_dispatch(InIt first, InIt last, container_detail::false_) - { - //Dispatch depending on integer/iterator - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_assign_aux(first, last, ItCat()); - } - - template - void priv_insert_dispatch(const_iterator pos, Integer n, Integer val, container_detail::true_) - { this->insert(pos, (size_type)n, (T)val); } - - template - void priv_insert_dispatch(const_iterator pos, InIt first, - InIt last, container_detail::false_) - { - //Dispatch depending on integer/iterator - typedef typename std::iterator_traits::iterator_category ItCat; - this->priv_range_insert(pos, first, last, ItCat()); - } - void priv_check_range(size_type n) const { //If n is out of range, throw an out_of_range exception - if (n >= size()) + if (n >= this->size()) throw std::out_of_range("vector::at"); } @@ -2181,31 +2050,31 @@ class vector : private container_detail::vector_alloc_holder /// @endcond }; -template +template inline bool -operator==(const vector& x, const vector& y) +operator==(const vector& x, const vector& y) { //Check first size and each element if needed return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin()); } -template +template inline bool -operator!=(const vector& x, const vector& y) +operator!=(const vector& x, const vector& y) { //Check first size and each element if needed return x.size() != y.size() || !std::equal(x.begin(), x.end(), y.begin()); } -template +template inline bool -operator<(const vector& x, const vector& y) +operator<(const vector& x, const vector& y) { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); } -template -inline void swap(vector& x, vector& y) +template +inline void swap(vector& x, vector& y) { x.swap(y); } }} @@ -2218,10 +2087,10 @@ namespace boost { //!has_trivial_destructor_after_move<> == true_type //!specialization for optimizations -template -struct has_trivial_destructor_after_move > +template +struct has_trivial_destructor_after_move > { - static const bool value = has_trivial_destructor::value; + static const bool value = has_trivial_destructor::value; }; */ diff --git a/3party/boost/boost/context/all.hpp b/3party/boost/boost/context/all.hpp index f9a4c71dbf..cbb63af7fe 100644 --- a/3party/boost/boost/context/all.hpp +++ b/3party/boost/boost/context/all.hpp @@ -4,11 +4,12 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_ALL_H -#define BOOST_CTX_ALL_H +#ifndef BOOST_CONTEXT_ALL_H +#define BOOST_CONTEXT_ALL_H #include -#include -#include +#include +#include +#include -#endif // BOOST_CTX_ALL_H +#endif // BOOST_CONTEXT_ALL_H diff --git a/3party/boost/boost/context/detail/config.hpp b/3party/boost/boost/context/detail/config.hpp index 50ada3c507..0d7b7fce6b 100644 --- a/3party/boost/boost/context/detail/config.hpp +++ b/3party/boost/boost/context/detail/config.hpp @@ -4,8 +4,8 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_CONFIG_H -#define BOOST_CTX_DETAIL_CONFIG_H +#ifndef BOOST_CONTEXT_DETAIL_CONFIG_H +#define BOOST_CONTEXT_DETAIL_CONFIG_H #include #include @@ -39,4 +39,4 @@ # include #endif -#endif // BOOST_CTX_DETAIL_CONFIG_H +#endif // BOOST_CONTEXT_DETAIL_CONFIG_H diff --git a/3party/boost/boost/context/detail/fcontext_arm.hpp b/3party/boost/boost/context/detail/fcontext_arm.hpp index b4ed2fa264..8b88ccfdd4 100644 --- a/3party/boost/boost/context/detail/fcontext_arm.hpp +++ b/3party/boost/boost/context/detail/fcontext_arm.hpp @@ -4,8 +4,10 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_FCONTEXT_ARM_H -#define BOOST_CTX_DETAIL_FCONTEXT_ARM_H +#ifndef BOOST_CONTEXT_DETAIL_FCONTEXT_ARM_H +#define BOOST_CONTEXT_DETAIL_FCONTEXT_ARM_H + +#include #include #include @@ -17,7 +19,7 @@ #endif namespace boost { -namespace ctx { +namespace context { extern "C" { @@ -25,11 +27,11 @@ extern "C" { struct stack_t { - void * base; - void * limit; + void * sp; + std::size_t size; stack_t() : - base( 0), limit( 0) + sp( 0), size( 0) {} }; @@ -63,4 +65,4 @@ struct fcontext_t # include BOOST_ABI_SUFFIX #endif -#endif // BOOST_CTX_DETAIL_FCONTEXT_ARM_H +#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_ARM_H diff --git a/3party/boost/boost/context/detail/fcontext_i386.hpp b/3party/boost/boost/context/detail/fcontext_i386.hpp index 573a22caf3..2e01323556 100644 --- a/3party/boost/boost/context/detail/fcontext_i386.hpp +++ b/3party/boost/boost/context/detail/fcontext_i386.hpp @@ -4,8 +4,8 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_FCONTEXT_I386H -#define BOOST_CTX_DETAIL_FCONTEXT_I386H +#ifndef BOOST_CONTEXT_DETAIL_FCONTEXT_I386H +#define BOOST_CONTEXT_DETAIL_FCONTEXT_I386H #include @@ -19,7 +19,7 @@ #endif namespace boost { -namespace ctx { +namespace context { extern "C" { @@ -27,20 +27,11 @@ extern "C" { struct stack_t { - void * base; - void * limit; + void * sp; + std::size_t size; stack_t() : - base( 0), limit( 0) - {} -}; - -struct fp_t -{ - boost::uint32_t fc_freg[2]; - - fp_t() : - fc_freg() + sp( 0), size( 0) {} }; @@ -48,12 +39,12 @@ struct fcontext_t { boost::uint32_t fc_greg[6]; stack_t fc_stack; - fp_t fc_fp; + boost::uint32_t fc_freg[2]; fcontext_t() : fc_greg(), fc_stack(), - fc_fp() + fc_freg() {} }; @@ -65,4 +56,4 @@ struct fcontext_t # include BOOST_ABI_SUFFIX #endif -#endif // BOOST_CTX_DETAIL_FCONTEXT_I386_H +#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_I386_H diff --git a/3party/boost/boost/context/detail/fcontext_i386_win.hpp b/3party/boost/boost/context/detail/fcontext_i386_win.hpp index e250ec5e3b..4a5ee39e23 100644 --- a/3party/boost/boost/context/detail/fcontext_i386_win.hpp +++ b/3party/boost/boost/context/detail/fcontext_i386_win.hpp @@ -4,13 +4,15 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_FCONTEXT_I386H -#define BOOST_CTX_DETAIL_FCONTEXT_I386H +#ifndef BOOST_CONTEXT_DETAIL_FCONTEXT_I386H +#define BOOST_CONTEXT_DETAIL_FCONTEXT_I386H #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif +#include + #include #include @@ -26,7 +28,7 @@ #endif namespace boost { -namespace ctx { +namespace context { extern "C" { @@ -34,11 +36,12 @@ extern "C" { struct stack_t { - void * base; + void * sp; + std::size_t size; void * limit; stack_t() : - base( 0), limit( 0) + sp( 0), size( 0), limit( 0) {} }; @@ -80,4 +83,4 @@ struct fcontext_t #pragma warning(pop) #endif -#endif // BOOST_CTX_DETAIL_FCONTEXT_I386_H +#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_I386_H diff --git a/3party/boost/boost/context/detail/fcontext_mips.hpp b/3party/boost/boost/context/detail/fcontext_mips.hpp index 1645adfb8b..d3cd60de48 100644 --- a/3party/boost/boost/context/detail/fcontext_mips.hpp +++ b/3party/boost/boost/context/detail/fcontext_mips.hpp @@ -4,8 +4,10 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_FCONTEXT_MIPS_H -#define BOOST_CTX_DETAIL_FCONTEXT_MIPS_H +#ifndef BOOST_CONTEXT_DETAIL_FCONTEXT_MIPS_H +#define BOOST_CONTEXT_DETAIL_FCONTEXT_MIPS_H + +#include #include #include @@ -17,7 +19,7 @@ #endif namespace boost { -namespace ctx { +namespace context { extern "C" { @@ -27,11 +29,11 @@ extern "C" { struct stack_t { - void * base; - void * limit; + void * sp; + std::size_t size; stack_t() : - base( 0), limit( 0) + sp( 0), size( 0) {} }; @@ -46,7 +48,7 @@ struct fp_t struct fcontext_t { - boost::uint64_t fc_greg[13]; + boost::uint32_t fc_greg[12]; stack_t fc_stack; fp_t fc_fp; @@ -65,4 +67,4 @@ struct fcontext_t # include BOOST_ABI_SUFFIX #endif -#endif // BOOST_CTX_DETAIL_FCONTEXT_MIPS_H +#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_MIPS_H diff --git a/3party/boost/boost/context/detail/fcontext_ppc.hpp b/3party/boost/boost/context/detail/fcontext_ppc.hpp index 5e6c64c555..6cb019f54f 100644 --- a/3party/boost/boost/context/detail/fcontext_ppc.hpp +++ b/3party/boost/boost/context/detail/fcontext_ppc.hpp @@ -4,8 +4,10 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_FCONTEXT_PPC_H -#define BOOST_CTX_DETAIL_FCONTEXT_PPC_H +#ifndef BOOST_CONTEXT_DETAIL_FCONTEXT_PPC_H +#define BOOST_CONTEXT_DETAIL_FCONTEXT_PPC_H + +#include #include #include @@ -17,7 +19,7 @@ #endif namespace boost { -namespace ctx { +namespace context { extern "C" { @@ -25,11 +27,11 @@ extern "C" { struct stack_t { - void * base; - void * limit; + void * sp; + std::size_t size; stack_t() : - base( 0), limit( 0) + sp( 0), size( 0) {} }; @@ -67,4 +69,4 @@ struct fcontext_t # include BOOST_ABI_SUFFIX #endif -#endif // BOOST_CTX_DETAIL_FCONTEXT_PPC_H +#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_PPC_H diff --git a/3party/boost/boost/context/detail/fcontext_x86_64.hpp b/3party/boost/boost/context/detail/fcontext_x86_64.hpp index 106ee74065..6e8d93c0cb 100644 --- a/3party/boost/boost/context/detail/fcontext_x86_64.hpp +++ b/3party/boost/boost/context/detail/fcontext_x86_64.hpp @@ -4,8 +4,10 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_FCONTEXT_X86_64_H -#define BOOST_CTX_DETAIL_FCONTEXT_X86_64_H +#ifndef BOOST_CONTEXT_DETAIL_FCONTEXT_X86_64_H +#define BOOST_CONTEXT_DETAIL_FCONTEXT_X86_64_H + +#include #include #include @@ -17,7 +19,7 @@ #endif namespace boost { -namespace ctx { +namespace context { extern "C" { @@ -25,11 +27,11 @@ extern "C" { struct stack_t { - void * base; - void * limit; + void * sp; + std::size_t size; stack_t() : - base( 0), limit( 0) + sp( 0), size( 0) {} }; @@ -63,4 +65,4 @@ struct fcontext_t # include BOOST_ABI_SUFFIX #endif -#endif // BOOST_CTX_DETAIL_FCONTEXT_X86_64_H +#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_X86_64_H diff --git a/3party/boost/boost/context/detail/fcontext_x86_64_win.hpp b/3party/boost/boost/context/detail/fcontext_x86_64_win.hpp index 96f153b8e2..56d671af6a 100644 --- a/3party/boost/boost/context/detail/fcontext_x86_64_win.hpp +++ b/3party/boost/boost/context/detail/fcontext_x86_64_win.hpp @@ -4,14 +4,15 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_DETAIL_FCONTEXT_X86_64_H -#define BOOST_CTX_DETAIL_FCONTEXT_X86_64_H +#ifndef BOOST_CONTEXT_DETAIL_FCONTEXT_X86_64_H +#define BOOST_CONTEXT_DETAIL_FCONTEXT_X86_64_H #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif -#include +#include + #include #include @@ -27,7 +28,7 @@ #endif namespace boost { -namespace ctx { +namespace context { extern "C" { @@ -35,11 +36,12 @@ extern "C" { struct stack_t { - void * base; + void * sp; + std::size_t size; void * limit; stack_t() : - base( 0), limit( 0) + sp( 0), size( 0), limit( 0) {} }; @@ -87,4 +89,4 @@ struct fcontext_t #pragma warning(pop) #endif -#endif // BOOST_CTX_DETAIL_FCONTEXT_X86_64_H +#endif // BOOST_CONTEXT_DETAIL_FCONTEXT_X86_64_H diff --git a/3party/boost/boost/context/fcontext.hpp b/3party/boost/boost/context/fcontext.hpp index d2cc030a1e..9e8cda6da2 100644 --- a/3party/boost/boost/context/fcontext.hpp +++ b/3party/boost/boost/context/fcontext.hpp @@ -4,8 +4,8 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_FCONTEXT_H -#define BOOST_CTX_FCONTEXT_H +#ifndef BOOST_CONTEXT_FCONTEXT_H +#define BOOST_CONTEXT_FCONTEXT_H #if defined(__PGI) #include @@ -60,7 +60,7 @@ #endif namespace boost { -namespace ctx { +namespace context { namespace detail { extern "C" BOOST_CONTEXT_DECL void * BOOST_CONTEXT_CALLDECL align_stack( void * vp); @@ -70,7 +70,7 @@ extern "C" BOOST_CONTEXT_DECL void * BOOST_CONTEXT_CALLDECL align_stack( void * extern "C" BOOST_CONTEXT_DECL intptr_t BOOST_CONTEXT_CALLDECL jump_fcontext( fcontext_t * ofc, fcontext_t const* nfc, intptr_t vp, bool preserve_fpu = true); extern "C" BOOST_CONTEXT_DECL -void BOOST_CONTEXT_CALLDECL make_fcontext( fcontext_t * fc, void (* fn)( intptr_t) ); +fcontext_t * BOOST_CONTEXT_CALLDECL make_fcontext( void * sp, std::size_t size, void (* fn)( intptr_t) ); }} @@ -78,5 +78,5 @@ void BOOST_CONTEXT_CALLDECL make_fcontext( fcontext_t * fc, void (* fn)( intptr_ # include BOOST_ABI_SUFFIX #endif -#endif // BOOST_CTX_FCONTEXT_H +#endif // BOOST_CONTEXT_FCONTEXT_H diff --git a/3party/boost/boost/context/guarded_stack_allocator.hpp b/3party/boost/boost/context/guarded_stack_allocator.hpp new file mode 100644 index 0000000000..92cf32387a --- /dev/null +++ b/3party/boost/boost/context/guarded_stack_allocator.hpp @@ -0,0 +1,55 @@ + +// Copyright Oliver Kowalke 2009. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_CONTEXT_GUARDED_STACK_ALLOCATOR_H +#define BOOST_CONTEXT_GUARDED_STACK_ALLOCATOR_H + +#include + +#if ! defined (BOOST_WINDOWS) +extern "C" { +#include +} +#endif + +//#if defined (BOOST_WINDOWS) || _POSIX_C_SOURCE >= 200112L + +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace context { + +class BOOST_CONTEXT_DECL guarded_stack_allocator +{ +public: + static bool is_stack_unbound(); + + static std::size_t default_stacksize(); + + static std::size_t minimum_stacksize(); + + static std::size_t maximum_stacksize(); + + void * allocate( std::size_t) const; + + void deallocate( void *, std::size_t) const; +}; + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +//#endif + +#endif // BOOST_CONTEXT_GUARDED_STACK_ALLOCATOR_H diff --git a/3party/boost/boost/context/simple_stack_allocator.hpp b/3party/boost/boost/context/simple_stack_allocator.hpp new file mode 100644 index 0000000000..afc506866f --- /dev/null +++ b/3party/boost/boost/context/simple_stack_allocator.hpp @@ -0,0 +1,67 @@ + +// Copyright Oliver Kowalke 2009. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_CONTEXT_SIMPLE_STACK_ALLOCATOR_H +#define BOOST_CONTEXT_SIMPLE_STACK_ALLOCATOR_H + +#include +#include +#include + +#include +#include + +#include + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_PREFIX +#endif + +namespace boost { +namespace context { + +template< std::size_t Max, std::size_t Default, std::size_t Min > +class simple_stack_allocator +{ +public: + static std::size_t maximum_stacksize() + { return Max; } + + static std::size_t default_stacksize() + { return Default; } + + static std::size_t minimum_stacksize() + { return Min; } + + void * allocate( std::size_t size) const + { + BOOST_ASSERT( minimum_stacksize() <= size); + BOOST_ASSERT( maximum_stacksize() >= size); + + void * limit = std::calloc( size, sizeof( char) ); + if ( ! limit) throw std::bad_alloc(); + + return static_cast< char * >( limit) + size; + } + + void deallocate( void * vp, std::size_t size) const + { + BOOST_ASSERT( vp); + BOOST_ASSERT( minimum_stacksize() <= size); + BOOST_ASSERT( maximum_stacksize() >= size); + + void * limit = static_cast< char * >( vp) - size; + std::free( limit); + } +}; + +}} + +#ifdef BOOST_HAS_ABI_HEADERS +# include BOOST_ABI_SUFFIX +#endif + +#endif // BOOST_CONTEXT_SIMPLE_STACK_ALLOCATOR_H diff --git a/3party/boost/boost/context/stack_utils.hpp b/3party/boost/boost/context/stack_utils.hpp deleted file mode 100644 index ca3ed2135f..0000000000 --- a/3party/boost/boost/context/stack_utils.hpp +++ /dev/null @@ -1,41 +0,0 @@ - -// Copyright Oliver Kowalke 2009. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef BOOST_CTX_STACK_UTILS_H -#define BOOST_CTX_STACK_UTILS_H - -#include - -#include - -#include - -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif - -namespace boost { -namespace ctx { - -BOOST_CONTEXT_DECL std::size_t default_stacksize(); - -BOOST_CONTEXT_DECL std::size_t minimum_stacksize(); - -BOOST_CONTEXT_DECL std::size_t maximum_stacksize(); - -BOOST_CONTEXT_DECL std::size_t pagesize(); - -BOOST_CONTEXT_DECL std::size_t page_count( std::size_t stacksize); - -BOOST_CONTEXT_DECL bool is_stack_unbound(); - -}} - -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif - -#endif // BOOST_CTX_STACK_UTILS_H diff --git a/3party/boost/boost/context/stack_allocator.hpp b/3party/boost/boost/context/utils.hpp similarity index 60% rename from 3party/boost/boost/context/stack_allocator.hpp rename to 3party/boost/boost/context/utils.hpp index 0db50157d1..4b6a2bc222 100644 --- a/3party/boost/boost/context/stack_allocator.hpp +++ b/3party/boost/boost/context/utils.hpp @@ -4,13 +4,21 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_CTX_STACK_ALLOCATOR_H -#define BOOST_CTX_STACK_ALLOCATOR_H - -#include +#ifndef BOOST_CONTEXT_UTILS_H +#define BOOST_CONTEXT_UTILS_H #include +#if ! defined (BOOST_WINDOWS) +extern "C" { +#include +} +#endif + +//#if defined (BOOST_WINDOWS) || _POSIX_C_SOURCE >= 200112L + +#include + #include #ifdef BOOST_HAS_ABI_HEADERS @@ -18,15 +26,9 @@ #endif namespace boost { -namespace ctx { +namespace context { -class BOOST_CONTEXT_DECL stack_allocator -{ -public: - void * allocate( std::size_t) const; - - void deallocate( void *, std::size_t) const; -}; +BOOST_CONTEXT_DECL std::size_t pagesize(); }} @@ -34,4 +36,6 @@ public: # include BOOST_ABI_SUFFIX #endif -#endif // BOOST_CTX_STACK_ALLOCATOR_H +//#endif + +#endif // BOOST_CONTEXT_UTILS_H diff --git a/3party/boost/boost/date_time/c_time.hpp b/3party/boost/boost/date_time/c_time.hpp index b3509afec6..f7e116b2dd 100644 --- a/3party/boost/boost/date_time/c_time.hpp +++ b/3party/boost/boost/date_time/c_time.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $ */ diff --git a/3party/boost/boost/date_time/date.hpp b/3party/boost/boost/date_time/date.hpp index 81730cab07..f77ae29d5d 100644 --- a/3party/boost/boost/date_time/date.hpp +++ b/3party/boost/boost/date_time/date.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ #include @@ -191,8 +191,8 @@ namespace date_time { dates. It is not exposed to users since that would require class users to understand the inner workings of the date class. */ - explicit date(date_int_type days) : days_(days) {}; - explicit date(date_rep_type days) : days_(days.as_number()) {}; + explicit date(date_int_type days) : days_(days) {} + explicit date(date_rep_type days) : days_(days.as_number()) {} date_int_type days_; }; diff --git a/3party/boost/boost/date_time/date_duration.hpp b/3party/boost/boost/date_time/date_duration.hpp index 7bd48fd2b7..c573944571 100644 --- a/3party/boost/boost/date_time/date_duration.hpp +++ b/3party/boost/boost/date_time/date_duration.hpp @@ -2,11 +2,11 @@ #define DATE_TIME_DATE_DURATION__ /* Copyright (c) 2002,2003 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the + * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ @@ -26,14 +26,14 @@ namespace date_time { , boost::subtractable1< date_duration< duration_rep_traits > , boost::dividable2< date_duration< duration_rep_traits >, int > > > > > - { + { public: typedef typename duration_rep_traits::int_type duration_rep_type; typedef typename duration_rep_traits::impl_type duration_rep; - + //! Construct from a day count - explicit date_duration(duration_rep day_count) : days_(day_count) {}; - + explicit date_duration(duration_rep day_count) : days_(day_count) {} + /*! construct from special_values - only works when * instantiated with duration_traits_adapted */ date_duration(special_values sv) : @@ -125,7 +125,7 @@ namespace date_time { { typedef long int_type; typedef long impl_type; - static int_type as_number(impl_type i) { return i; }; + static int_type as_number(impl_type i) { return i; } }; /*! Struct for instantiating date_duration WITH special values @@ -135,9 +135,9 @@ namespace date_time { { typedef long int_type; typedef boost::date_time::int_adapter impl_type; - static int_type as_number(impl_type i) { return i.as_number(); }; + static int_type as_number(impl_type i) { return i.as_number(); } }; - + } } //namspace date_time diff --git a/3party/boost/boost/date_time/date_facet.hpp b/3party/boost/boost/date_time/date_facet.hpp index 1584fe56a4..fc2ddc246e 100644 --- a/3party/boost/boost/date_time/date_facet.hpp +++ b/3party/boost/boost/date_time/date_facet.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Martin Andrian, Jeff Garland, Bart Garst - * $Date: 2009-06-04 04:40:18 -0700 (Thu, 04 Jun 2009) $ + * $Date: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $ */ #include @@ -208,7 +208,8 @@ namespace boost { namespace date_time { // return do_put_special(next, a_ios, fill_char, d.as_special()); //} //The following line of code required the date to support a to_tm function - std::tm dtm = {}; + std::tm dtm; + std::memset(&dtm, 0, sizeof(dtm)); dtm.tm_mon = m - 1; return do_put_tm(next, a_ios, fill_char, dtm, m_month_format); } @@ -219,7 +220,8 @@ namespace boost { namespace date_time { char_type fill_char, const day_type& day) const { - std::tm dtm = {}; + std::tm dtm; + std::memset(&dtm, 0, sizeof(dtm)); dtm.tm_mday = day.as_number(); char_type tmp[3] = {'%','d'}; string_type temp_format(tmp); @@ -235,7 +237,8 @@ namespace boost { namespace date_time { // return do_put_special(next, a_ios, fill_char, d.as_special()); //} //The following line of code required the date to support a to_tm function - std::tm dtm = {}; + std::tm dtm; + std::memset(&dtm, 0, sizeof(dtm)); dtm.tm_wday = dow; return do_put_tm(next, a_ios, fill_char, dtm, m_weekday_format); } diff --git a/3party/boost/boost/date_time/date_formatting.hpp b/3party/boost/boost/date_time/date_formatting.hpp index 0903c75bfb..06709bc5e9 100644 --- a/3party/boost/boost/date_time/date_formatting.hpp +++ b/3party/boost/boost/date_time/date_formatting.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $ */ #include "boost/date_time/iso_format.hpp" @@ -54,7 +54,9 @@ namespace date_time { os << std::setw(2) << std::setfill(os.widen('0')) << month.as_number(); break; } - + default: + break; + } return os; } // format_month diff --git a/3party/boost/boost/date_time/date_generators.hpp b/3party/boost/boost/date_time/date_generators.hpp index 1944c3412c..6d3a4ac0b7 100644 --- a/3party/boost/boost/date_time/date_generators.hpp +++ b/3party/boost/boost/date_time/date_generators.hpp @@ -2,11 +2,11 @@ #define DATE_TIME_DATE_GENERATORS_HPP__ /* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the + * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ + * Author: Jeff Garland, Bart Garst + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ /*! @file date_generators.hpp @@ -34,16 +34,16 @@ namespace date_time { public: typedef typename date_type::calendar_type calendar_type; typedef typename calendar_type::year_type year_type; - year_based_generator() {}; - virtual ~year_based_generator() {}; + year_based_generator() {} + virtual ~year_based_generator() {} virtual date_type get_date(year_type y) const = 0; //! Returns a string for use in a POSIX time_zone string virtual std::string to_string() const =0; }; - + //! Generates a date by applying the year to the given month and day. /*! - Example usage: + Example usage: @code partial_date pd(1, Jan); partial_date pd2(70); @@ -123,9 +123,9 @@ namespace date_time { //months are equal return (day_ < rhs.day_); } - + // added for streaming purposes - month_type month() const + month_type month() const { return month_; } @@ -135,15 +135,15 @@ namespace date_time { } //! Returns string suitable for use in POSIX time zone string - /*! Returns string formatted with up to 3 digits: - * Jan-01 == "0" + /*! Returns string formatted with up to 3 digits: + * Jan-01 == "0" * Feb-29 == "58" * Dec-31 == "365" */ virtual std::string to_string() const { std::ostringstream ss; date_type d(2004, month_, day_); - unsigned short c = d.day_of_year(); + unsigned short c = d.day_of_year(); c--; // numbered 0-365 while day_of_year is 1 based... ss << c; return ss.str(); @@ -161,7 +161,7 @@ namespace date_time { /*! Based on the idea in Cal. Calc. for finding holidays that are * the 'first Monday of September'. When instantiated with * 'fifth' kday of month, the result will be the last kday of month - * which can be the fourth or fifth depending on the structure of + * which can be the fourth or fifth depending on the structure of * the month. * * The algorithm here basically guesses for the first @@ -169,8 +169,8 @@ namespace date_time { * type. That is, if the first of the month is a Tuesday * and it needs Wenesday then we simply increment by a day * and then we can add the length of a week until we get - * to the 'nth kday'. There are probably more efficient - * algorithms based on using a mod 7, but this one works + * to the 'nth kday'. There are probably more efficient + * algorithms based on using a mod 7, but this one works * reasonably well for basic applications. * \ingroup date_alg */ @@ -233,7 +233,7 @@ namespace date_time { virtual std::string to_string() const { std::ostringstream ss; - ss << 'M' + ss << 'M' << static_cast(month_) << '.' << static_cast(wn_) << '.' << static_cast(dow_); @@ -244,7 +244,7 @@ namespace date_time { week_num wn_; day_of_week_type dow_; }; - + //! Useful generator functor for finding holidays and daylight savings /*! Similar to nth_kday_of_month, but requires less paramters * \ingroup date_alg @@ -290,7 +290,7 @@ namespace date_time { virtual std::string to_string() const { std::ostringstream ss; - ss << 'M' + ss << 'M' << static_cast(month_) << '.' << 1 << '.' << static_cast(dow_); @@ -300,9 +300,9 @@ namespace date_time { month_type month_; day_of_week_type dow_; }; - - - + + + //! Calculate something like Last Sunday of January /*! Useful generator functor for finding holidays and daylight savings * Get the last day of the month and then calculate the difference @@ -351,7 +351,7 @@ namespace date_time { virtual std::string to_string() const { std::ostringstream ss; - ss << 'M' + ss << 'M' << static_cast(month_) << '.' << 5 << '.' << static_cast(dow_); @@ -361,8 +361,8 @@ namespace date_time { month_type month_; day_of_week_type dow_; }; - - + + //! Calculate something like "First Sunday after Jan 1,2002 /*! Date generator that takes a date and finds kday after *@code @@ -400,7 +400,7 @@ namespace date_time { private: day_of_week_type dow_; }; - + //! Calculate something like "First Sunday before Jan 1,2002 /*! Date generator that takes a date and finds kday after *@code @@ -438,10 +438,10 @@ namespace date_time { private: day_of_week_type dow_; }; - + //! Calculates the number of days until the next weekday /*! Calculates the number of days until the next weekday. - * If the date given falls on a Sunday and the given weekday + * If the date given falls on a Sunday and the given weekday * is Tuesday the result will be 2 days */ template inline @@ -458,8 +458,8 @@ namespace date_time { //! Calculates the number of days since the previous weekday /*! Calculates the number of days since the previous weekday - * If the date given falls on a Sunday and the given weekday - * is Tuesday the result will be 5 days. The answer will be a positive + * If the date given falls on a Sunday and the given weekday + * is Tuesday the result will be 5 days. The answer will be a positive * number because Tuesday is 5 days before Sunday, not -5 days before. */ template inline @@ -477,9 +477,9 @@ namespace date_time { } //! Generates a date object representing the date of the following weekday from the given date - /*! Generates a date object representing the date of the following - * weekday from the given date. If the date given is 2004-May-9 - * (a Sunday) and the given weekday is Tuesday then the resulting date + /*! Generates a date object representing the date of the following + * weekday from the given date. If the date given is 2004-May-9 + * (a Sunday) and the given weekday is Tuesday then the resulting date * will be 2004-May-11. */ template inline @@ -489,9 +489,9 @@ namespace date_time { } //! Generates a date object representing the date of the previous weekday from the given date - /*! Generates a date object representing the date of the previous - * weekday from the given date. If the date given is 2004-May-9 - * (a Sunday) and the given weekday is Tuesday then the resulting date + /*! Generates a date object representing the date of the previous + * weekday from the given date. If the date given is 2004-May-9 + * (a Sunday) and the given weekday is Tuesday then the resulting date * will be 2004-May-4. */ template inline diff --git a/3party/boost/boost/date_time/date_iterator.hpp b/3party/boost/boost/date_time/date_iterator.hpp index 20bfb05c9f..c8ec50eeb4 100644 --- a/3party/boost/boost/date_time/date_iterator.hpp +++ b/3party/boost/boost/date_time/date_iterator.hpp @@ -2,11 +2,11 @@ #define DATE_ITERATOR_HPP___ /* Copyright (c) 2002,2003 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the + * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ #include @@ -32,7 +32,7 @@ namespace date_time { template class date_itr_base { // works, but benefit unclear at the moment - // class date_itr_base : public std::iterator{ public: typedef typename date_type::duration_type duration_type; @@ -40,31 +40,31 @@ namespace date_time { typedef std::input_iterator_tag iterator_category; date_itr_base(date_type d) : current_(d) {} - virtual ~date_itr_base() {}; - date_itr_base& operator++() + virtual ~date_itr_base() {} + date_itr_base& operator++() { current_ = current_ + get_offset(current_); return *this; } - date_itr_base& operator--() + date_itr_base& operator--() { current_ = current_ + get_neg_offset(current_); return *this; } virtual duration_type get_offset(const date_type& current) const=0; virtual duration_type get_neg_offset(const date_type& current) const=0; - date_type operator*() {return current_;}; - date_type* operator->() {return ¤t_;}; + date_type operator*() {return current_;} + date_type* operator->() {return ¤t_;} bool operator< (const date_type& d) {return current_ < d;} bool operator<= (const date_type& d) {return current_ <= d;} bool operator> (const date_type& d) {return current_ > d;} bool operator>= (const date_type& d) {return current_ >= d;} bool operator== (const date_type& d) {return current_ == d;} - bool operator!= (const date_type& d) {return current_ != d;} + bool operator!= (const date_type& d) {return current_ != d;} private: date_type current_; }; - + //! Overrides the base date iterator providing hook for functors /* * offset_functor @@ -77,9 +77,9 @@ namespace date_time { class date_itr : public date_itr_base { public: typedef typename date_type::duration_type duration_type; - date_itr(date_type d, int factor=1) : - date_itr_base(d), - of_(factor) + date_itr(date_type d, int factor=1) : + date_itr_base(d), + of_(factor) {} private: virtual duration_type get_offset(const date_type& current) const @@ -92,9 +92,9 @@ namespace date_time { } offset_functor of_; }; - - + + } } //namespace date_time diff --git a/3party/boost/boost/date_time/date_names_put.hpp b/3party/boost/boost/date_time/date_names_put.hpp index 6606f43153..32aeb36f5c 100644 --- a/3party/boost/boost/date_time/date_names_put.hpp +++ b/3party/boost/boost/date_time/date_names_put.hpp @@ -2,11 +2,11 @@ #define DATE_TIME_DATE_NAMES_PUT_HPP___ /* Copyright (c) 2002-2005 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the + * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) - * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * Author: Jeff Garland, Bart Garst + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ @@ -27,22 +27,22 @@ namespace date_time { //! Output facet base class for gregorian dates. /*! This class is a base class for date facets used to localize the * names of months and the names of days in the week. - * + * * Requirements of Config - * - define an enumeration month_enum that enumerates the months. + * - define an enumeration month_enum that enumerates the months. * The enumeration should be '1' based eg: Jan==1 * - define as_short_string and as_long_string * * (see langer & kreft p334). - * + * */ template > class date_names_put : public std::locale::facet { public: - date_names_put() {}; + date_names_put() {} typedef OutputIterator iter_type; typedef typename Config::month_type month_type; typedef typename Config::month_enum month_enum; @@ -118,7 +118,7 @@ namespace date_time { put_string(oitr, gm.as_short_string(c)); } //! Default facet implementation uses month_type defaults - virtual void do_put_month_long(iter_type& oitr, + virtual void do_put_month_long(iter_type& oitr, month_enum moy) const { month_type gm(moy); @@ -160,7 +160,7 @@ namespace date_time { string_type s(separator); //put in '-' put_string(oitr, s); } - //! Default for date order + //! Default for date order virtual ymd_order_spec do_date_order() const { return ymd_order_iso; @@ -186,27 +186,27 @@ namespace date_time { } } }; - + template - const typename date_names_put::char_type - date_names_put::default_special_value_names[3][17] = { + const typename date_names_put::char_type + date_names_put::default_special_value_names[3][17] = { {'n','o','t','-','a','-','d','a','t','e','-','t','i','m','e'}, {'-','i','n','f','i','n','i','t','y'}, {'+','i','n','f','i','n','i','t','y'} }; template - const typename date_names_put::char_type - date_names_put::separator[2] = + const typename date_names_put::char_type + date_names_put::separator[2] = {'-', '\0'} ; - - //! Generate storage location for a std::locale::id + + //! Generate storage location for a std::locale::id template std::locale::id date_names_put::id; //! A date name output facet that takes an array of char* to define strings template > class all_date_names_put : public date_names_put { @@ -230,29 +230,29 @@ namespace date_time { separator_char_[0] = separator_char; separator_char_[1] = '\0'; - }; + } typedef OutputIterator iter_type; typedef typename Config::month_enum month_enum; typedef typename Config::weekday_enum weekday_enum; typedef typename Config::special_value_enum special_value_enum; - const charT* const* get_short_month_names() const + const charT* const* get_short_month_names() const { return month_short_names_; } - const charT* const* get_long_month_names() const + const charT* const* get_long_month_names() const { return month_long_names_; } - const charT* const* get_special_value_names() const + const charT* const* get_special_value_names() const { return special_value_names_; } - const charT* const* get_short_weekday_names()const + const charT* const* get_short_weekday_names()const { return weekday_short_names_; } - const charT* const* get_long_weekday_names()const + const charT* const* get_long_weekday_names()const { return weekday_long_names_; } @@ -263,7 +263,7 @@ namespace date_time { { this->put_string(oitr, month_short_names_[moy-1]); } - //! Long month names + //! Long month names virtual void do_put_month_long(iter_type& oitr, month_enum moy) const { this->put_string(oitr, month_long_names_[moy-1]); @@ -310,7 +310,7 @@ namespace date_time { const charT* const* weekday_long_names_; charT separator_char_[2]; ymd_order_spec order_spec_; - month_format_spec month_format_spec_; + month_format_spec month_format_spec_; }; } } //namespace boost::date_time diff --git a/3party/boost/boost/date_time/date_parsing.hpp b/3party/boost/boost/date_time/date_parsing.hpp index aa8e8e0836..35ec8e43c3 100644 --- a/3party/boost/boost/date_time/date_parsing.hpp +++ b/3party/boost/boost/date_time/date_parsing.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $ + * $Date: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $ */ #include @@ -148,6 +148,7 @@ namespace date_time { day = boost::lexical_cast(*beg); break; } + default: break; } //switch } return date_type(year, month, day); @@ -180,6 +181,7 @@ namespace date_time { case 0: y = i; break; case 1: m = i; break; case 2: d = i; break; + default: break; } pos++; } diff --git a/3party/boost/boost/date_time/dst_rules.hpp b/3party/boost/boost/date_time/dst_rules.hpp index 503a255f1d..cf65c1622f 100644 --- a/3party/boost/boost/date_time/dst_rules.hpp +++ b/3party/boost/boost/date_time/dst_rules.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * $Date: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $ */ /*! @file dst_rules.hpp @@ -371,7 +371,7 @@ namespace boost { return is_not_in_dst; } - static bool is_dst_boundary_day(date_type d) + static bool is_dst_boundary_day(date_type /*d*/) { return false; } diff --git a/3party/boost/boost/date_time/dst_transition_generators.hpp b/3party/boost/boost/date_time/dst_transition_generators.hpp index 6c4da1c3c9..16c1fd6361 100644 --- a/3party/boost/boost/date_time/dst_transition_generators.hpp +++ b/3party/boost/boost/date_time/dst_transition_generators.hpp @@ -18,7 +18,7 @@ namespace date_time { { public: typedef typename date_type::year_type year_type; - virtual ~dst_day_calc_rule() {}; + virtual ~dst_day_calc_rule() {} virtual date_type start_day(year_type y) const=0; virtual std::string start_rule_as_string() const=0; virtual date_type end_day(year_type y) const=0; diff --git a/3party/boost/boost/date_time/filetime_functions.hpp b/3party/boost/boost/date_time/filetime_functions.hpp index 2460fd9791..3c7f13f38c 100644 --- a/3party/boost/boost/date_time/filetime_functions.hpp +++ b/3party/boost/boost/date_time/filetime_functions.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $ */ /*! @file filetime_functions.hpp diff --git a/3party/boost/boost/date_time/format_date_parser.hpp b/3party/boost/boost/date_time/format_date_parser.hpp index 4a76529f6c..0c3503f851 100644 --- a/3party/boost/boost/date_time/format_date_parser.hpp +++ b/3party/boost/boost/date_time/format_date_parser.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $ + * $Date: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $ */ @@ -256,7 +256,6 @@ class format_date_parser // skip leading whitespace while(std::isspace(*sitr) && sitr != stream_end) { ++sitr; } - charT current_char = *sitr; short year(0), month(0), day(0), day_of_year(0);// wkday(0); /* Initialized the following to their minimum values. These intermediate @@ -290,7 +289,6 @@ class format_date_parser } wkday = mr.current_match; if (mr.has_remaining()) { - current_char = mr.last_char(); use_current_char = true; } break; @@ -310,7 +308,6 @@ class format_date_parser } wkday = mr.current_match; if (mr.has_remaining()) { - current_char = mr.last_char(); use_current_char = true; } break; @@ -326,7 +323,6 @@ class format_date_parser } t_month = month_type(mr.current_match); if (mr.has_remaining()) { - current_char = mr.last_char(); use_current_char = true; } break; @@ -342,7 +338,6 @@ class format_date_parser } t_month = month_type(mr.current_match); if (mr.has_remaining()) { - current_char = mr.last_char(); use_current_char = true; } break; @@ -438,7 +433,6 @@ class format_date_parser itr++; if (use_current_char) { use_current_char = false; - current_char = *sitr; } else { sitr++; diff --git a/3party/boost/boost/date_time/gregorian/greg_serialize.hpp b/3party/boost/boost/date_time/gregorian/greg_serialize.hpp index a94bd73620..2cfad93c40 100644 --- a/3party/boost/boost/date_time/gregorian/greg_serialize.hpp +++ b/3party/boost/boost/date_time/gregorian/greg_serialize.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $ */ #include "boost/date_time/gregorian/gregorian_types.hpp" @@ -88,7 +88,7 @@ void load(Archive & ar, //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, +inline void load_construct_data(Archive & /*ar*/, ::boost::gregorian::date* dp, const unsigned int /*file_version*/) { @@ -117,7 +117,7 @@ void load(Archive & ar, gregorian::date_duration & dd, unsigned int /*version*/) } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::date_duration* dd, +inline void load_construct_data(Archive & /*ar*/, gregorian::date_duration* dd, const unsigned int /*file_version*/) { ::new(dd) gregorian::date_duration(gregorian::not_a_date_time); @@ -143,7 +143,7 @@ void load(Archive & ar, gregorian::date_duration::duration_rep & dr, unsigned in } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::date_duration::duration_rep* dr, +inline void load_construct_data(Archive & /*ar*/, gregorian::date_duration::duration_rep* dr, const unsigned int /*file_version*/) { ::new(dr) gregorian::date_duration::duration_rep(0); @@ -179,7 +179,7 @@ void load(Archive & ar, gregorian::date_period& dp, unsigned int /*version*/) } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::date_period* dp, +inline void load_construct_data(Archive & /*ar*/, gregorian::date_period* dp, const unsigned int /*file_version*/) { gregorian::date d(gregorian::not_a_date_time); @@ -207,7 +207,7 @@ void load(Archive & ar, gregorian::greg_year& gy, unsigned int /*version*/) } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::greg_year* gy, +inline void load_construct_data(Archive & /*ar*/, gregorian::greg_year* gy, const unsigned int /*file_version*/) { ::new(gy) gregorian::greg_year(1900); @@ -233,7 +233,7 @@ void load(Archive & ar, gregorian::greg_month& gm, unsigned int /*version*/) } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::greg_month* gm, +inline void load_construct_data(Archive & /*ar*/, gregorian::greg_month* gm, const unsigned int /*file_version*/) { ::new(gm) gregorian::greg_month(1); @@ -259,7 +259,7 @@ void load(Archive & ar, gregorian::greg_day& gd, unsigned int /*version*/) } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::greg_day* gd, +inline void load_construct_data(Archive & /*ar*/, gregorian::greg_day* gd, const unsigned int /*file_version*/) { ::new(gd) gregorian::greg_day(1); @@ -285,7 +285,7 @@ void load(Archive & ar, gregorian::greg_weekday& gd, unsigned int /*version*/) } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::greg_weekday* gd, +inline void load_construct_data(Archive & /*ar*/, gregorian::greg_weekday* gd, const unsigned int /*file_version*/) { ::new(gd) gregorian::greg_weekday(1); @@ -323,7 +323,7 @@ void load(Archive & ar, gregorian::partial_date& pd, unsigned int /*version*/) } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, gregorian::partial_date* pd, +inline void load_construct_data(Archive & /*ar*/, gregorian::partial_date* pd, const unsigned int /*file_version*/) { gregorian::greg_month gm(1); @@ -366,7 +366,7 @@ void load(Archive & ar, gregorian::nth_kday_of_month& nkd, unsigned int /*versio } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, +inline void load_construct_data(Archive & /*ar*/, gregorian::nth_kday_of_month* nkd, const unsigned int /*file_version*/) { @@ -406,7 +406,7 @@ void load(Archive & ar, gregorian::first_kday_of_month& fkd, unsigned int /*vers } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, +inline void load_construct_data(Archive & /*ar*/, gregorian::first_kday_of_month* fkd, const unsigned int /*file_version*/) { @@ -445,7 +445,7 @@ void load(Archive & ar, gregorian::last_kday_of_month& lkd, unsigned int /*versi } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, +inline void load_construct_data(Archive & /*ar*/, gregorian::last_kday_of_month* lkd, const unsigned int /*file_version*/) { @@ -474,7 +474,7 @@ void load(Archive & ar, gregorian::first_kday_before& fkdb, unsigned int /*versi } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, +inline void load_construct_data(Archive & /*ar*/, gregorian::first_kday_before* fkdb, const unsigned int /*file_version*/) { @@ -503,7 +503,7 @@ void load(Archive & ar, gregorian::first_kday_after& fkda, unsigned int /*versio } //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, +inline void load_construct_data(Archive & /*ar*/, gregorian::first_kday_after* fkda, const unsigned int /*file_version*/) { diff --git a/3party/boost/boost/date_time/gregorian_calendar.ipp b/3party/boost/boost/date_time/gregorian_calendar.ipp index 77fa03e4af..af19394f3d 100644 --- a/3party/boost/boost/date_time/gregorian_calendar.ipp +++ b/3party/boost/boost/date_time/gregorian_calendar.ipp @@ -3,7 +3,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $ */ #ifndef NO_BOOST_DATE_TIME_INLINE diff --git a/3party/boost/boost/date_time/local_time/custom_time_zone.hpp b/3party/boost/boost/date_time/local_time/custom_time_zone.hpp index 390c3f484a..84c59a3a0b 100644 --- a/3party/boost/boost/date_time/local_time/custom_time_zone.hpp +++ b/3party/boost/boost/date_time/local_time/custom_time_zone.hpp @@ -2,10 +2,10 @@ #define LOCAL_TIME_CUSTOM_TIME_ZONE_HPP__ /* Copyright (c) 2003-2005 CrystalClear Software, Inc. - * Subject to the Boost Software License, Version 1.0. + * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ #include "boost/date_time/time_zone_base.hpp" @@ -34,8 +34,8 @@ namespace local_time { typedef typename base_type::stringstream_type stringstream_type; typedef date_time::time_zone_names_base time_zone_names; typedef CharT char_type; - - custom_time_zone_base(const time_zone_names& zone_names, + + custom_time_zone_base(const time_zone_names& zone_names, const time_duration_type& utc_offset, const dst_adjustment_offsets& dst_shift, boost::shared_ptr calc_rule) : @@ -43,8 +43,8 @@ namespace local_time { base_utc_offset_(utc_offset), dst_offsets_(dst_shift), dst_calc_rules_(calc_rule) - {}; - virtual ~custom_time_zone_base() {}; + {} + virtual ~custom_time_zone_base() {} virtual string_type dst_zone_abbrev() const { return zone_names_.dst_zone_abbrev(); diff --git a/3party/boost/boost/date_time/local_time/local_date_time.hpp b/3party/boost/boost/date_time/local_time/local_date_time.hpp index 6955439cd7..96b2915837 100644 --- a/3party/boost/boost/date_time/local_time/local_date_time.hpp +++ b/3party/boost/boost/date_time/local_time/local_date_time.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-01-10 11:17:23 -0800 (Sun, 10 Jan 2010) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ #include @@ -208,7 +208,7 @@ namespace local_time { } //! Simple destructor, releases time zone if last referrer - ~local_date_time_base() {}; + ~local_date_time_base() {} //! Copy constructor local_date_time_base(const local_date_time_base& rhs) : diff --git a/3party/boost/boost/date_time/local_time/posix_time_zone.hpp b/3party/boost/boost/date_time/local_time/posix_time_zone.hpp index f640675bbd..ee1b553eea 100644 --- a/3party/boost/boost/date_time/local_time/posix_time_zone.hpp +++ b/3party/boost/boost/date_time/local_time/posix_time_zone.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2010-06-10 10:24:38 -0700 (Thu, 10 Jun 2010) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ #include @@ -115,7 +115,7 @@ namespace local_time{ calc_rules(dst_begin, dst_end); } } - virtual ~posix_time_zone_base() {}; + virtual ~posix_time_zone_base() {} //!String for the zone when not in daylight savings (eg: EST) virtual string_type std_zone_abbrev()const { diff --git a/3party/boost/boost/date_time/period_formatter.hpp b/3party/boost/boost/date_time/period_formatter.hpp index 925b20c03c..b6ddc82175 100644 --- a/3party/boost/boost/date_time/period_formatter.hpp +++ b/3party/boost/boost/date_time/period_formatter.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ @@ -114,10 +114,10 @@ namespace boost { namespace date_time { { m_range_option = option; } - void delimiter_strings(const string_type& separator, - const string_type& start_delim, - const string_type& open_end_delim, - const string_type& closed_end_delim) + void delimiter_strings(const string_type& , + const string_type& , + const string_type& , + const string_type& ) { m_period_separator; m_period_start_delimeter; diff --git a/3party/boost/boost/date_time/posix_time/posix_time_config.hpp b/3party/boost/boost/date_time/posix_time/posix_time_config.hpp index 716f5e650f..d0b76536e9 100644 --- a/3party/boost/boost/date_time/posix_time/posix_time_config.hpp +++ b/3party/boost/boost/date_time/posix_time/posix_time_config.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 04:52:28 -0700 (Thu, 04 Jun 2009) $ + * $Date: 2012-10-10 12:05:03 -0700 (Wed, 10 Oct 2012) $ */ #include //for MCW 7.2 std::abs(long long) @@ -81,7 +81,7 @@ namespace posix_time { {} //Give duration access to ticks constructor -- hide from users friend class date_time::time_duration; - private: + protected: explicit time_duration(impl_type tick_count) : date_time::time_duration(tick_count) {} diff --git a/3party/boost/boost/date_time/posix_time/time_serialize.hpp b/3party/boost/boost/date_time/posix_time/time_serialize.hpp index 3279d8d55d..c9038f19a6 100644 --- a/3party/boost/boost/date_time/posix_time/time_serialize.hpp +++ b/3party/boost/boost/date_time/posix_time/time_serialize.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-30 16:25:22 -0700 (Sun, 30 Sep 2012) $ */ #include "boost/date_time/posix_time/posix_time.hpp" @@ -184,7 +184,7 @@ void load(Archive & ar, //!override needed b/c no default constructor template -inline void load_construct_data(Archive & ar, +inline void load_construct_data(Archive & /*ar*/, boost::posix_time::time_period* tp, const unsigned int /*file_version*/) { diff --git a/3party/boost/boost/date_time/strings_from_facet.hpp b/3party/boost/boost/date_time/strings_from_facet.hpp index 845aeb84b9..7c0765bf8d 100644 --- a/3party/boost/boost/date_time/strings_from_facet.hpp +++ b/3party/boost/boost/date_time/strings_from_facet.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $ */ #include diff --git a/3party/boost/boost/date_time/time_duration.hpp b/3party/boost/boost/date_time/time_duration.hpp index b6df827f19..fc3660b7ce 100644 --- a/3party/boost/boost/date_time/time_duration.hpp +++ b/3party/boost/boost/date_time/time_duration.hpp @@ -2,15 +2,16 @@ #define DATE_TIME_TIME_DURATION_HPP___ /* Copyright (c) 2002,2003 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the + * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2009-06-04 01:24:49 -0700 (Thu, 04 Jun 2009) $ + * $Date: 2012-10-10 12:05:03 -0700 (Wed, 10 Oct 2012) $ */ #include #include +#include #include #include #include @@ -179,7 +180,7 @@ namespace date_time { return duration_type(ticks_); } //! Division operations on a duration with an integer. - duration_type operator/=(int divisor) + duration_type operator/=(int divisor) { ticks_ = ticks_ / divisor; return duration_type(ticks_); @@ -251,7 +252,7 @@ namespace date_time { } protected: - explicit time_duration(impl_type in) : ticks_(in) {}; + explicit time_duration(impl_type in) : ticks_(in) {} impl_type ticks_; }; @@ -265,10 +266,20 @@ namespace date_time { class subsecond_duration : public base_duration { public: + typedef typename base_duration::impl_type impl_type; typedef typename base_duration::traits_type traits_type; + + private: + // To avoid integer overflow we precompute the duration resolution conversion coefficient (ticket #3471) + BOOST_STATIC_ASSERT_MSG((traits_type::ticks_per_second >= frac_of_second ? traits_type::ticks_per_second % frac_of_second : frac_of_second % traits_type::ticks_per_second) == 0,\ + "The base duration resolution must be a multiple of the subsecond duration resolution"); + BOOST_STATIC_CONSTANT(boost::int64_t, adjustment_ratio = (traits_type::ticks_per_second >= frac_of_second ? traits_type::ticks_per_second / frac_of_second : frac_of_second / traits_type::ticks_per_second)); + + public: explicit subsecond_duration(boost::int64_t ss) : - base_duration(0,0,0,ss*traits_type::res_adjust()/frac_of_second) - {} + base_duration(impl_type(traits_type::ticks_per_second >= frac_of_second ? ss * adjustment_ratio : ss / adjustment_ratio)) + { + } }; diff --git a/3party/boost/boost/date_time/time_facet.hpp b/3party/boost/boost/date_time/time_facet.hpp index b3cda2c023..8346ca3009 100644 --- a/3party/boost/boost/date_time/time_facet.hpp +++ b/3party/boost/boost/date_time/time_facet.hpp @@ -7,7 +7,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Martin Andrian, Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $ */ #include diff --git a/3party/boost/boost/date_time/time_iterator.hpp b/3party/boost/boost/date_time/time_iterator.hpp index 98397de8f3..4c33f39e97 100644 --- a/3party/boost/boost/date_time/time_iterator.hpp +++ b/3party/boost/boost/date_time/time_iterator.hpp @@ -2,50 +2,50 @@ #define DATE_TIME_TIME_ITERATOR_HPP___ /* Copyright (c) 2002,2003 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the + * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ namespace boost { namespace date_time { - + //! Simple time iterator skeleton class template class time_itr { public: typedef typename time_type::time_duration_type time_duration_type; - time_itr(time_type t, time_duration_type d) : current_(t), offset_(d) {}; - time_itr& operator++() + time_itr(time_type t, time_duration_type d) : current_(t), offset_(d) {} + time_itr& operator++() { current_ = current_ + offset_; return *this; } - time_itr& operator--() + time_itr& operator--() { current_ = current_ - offset_; return *this; } - time_type operator*() {return current_;}; - time_type* operator->() {return ¤t_;}; - bool operator< (const time_type& t) {return current_ < t;}; - bool operator<= (const time_type& t) {return current_ <= t;}; - bool operator!= (const time_type& t) {return current_ != t;}; - bool operator== (const time_type& t) {return current_ == t;}; - bool operator> (const time_type& t) {return current_ > t;}; - bool operator>= (const time_type& t) {return current_ >= t;}; - + time_type operator*() {return current_;} + time_type* operator->() {return ¤t_;} + bool operator< (const time_type& t) {return current_ < t;} + bool operator<= (const time_type& t) {return current_ <= t;} + bool operator!= (const time_type& t) {return current_ != t;} + bool operator== (const time_type& t) {return current_ == t;} + bool operator> (const time_type& t) {return current_ > t;} + bool operator>= (const time_type& t) {return current_ >= t;} + private: time_type current_; time_duration_type offset_; }; - - + + } }//namespace date_time diff --git a/3party/boost/boost/date_time/time_parsing.hpp b/3party/boost/boost/date_time/time_parsing.hpp index 9258f94fc3..7b71de0da3 100644 --- a/3party/boost/boost/date_time/time_parsing.hpp +++ b/3party/boost/boost/date_time/time_parsing.hpp @@ -6,7 +6,7 @@ * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * $Date: 2012-10-10 12:05:03 -0700 (Wed, 10 Oct 2012) $ */ #include "boost/tokenizer.hpp" @@ -116,6 +116,7 @@ namespace date_time { break; } + default: break; }//switch pos++; } @@ -153,9 +154,10 @@ namespace date_time { std::string& first, std::string& second) { - int sep_pos = static_cast(s.find(sep)); + std::string::size_type sep_pos = s.find(sep); first = s.substr(0,sep_pos); - second = s.substr(sep_pos+1); + if (sep_pos!=std::string::npos) + second = s.substr(sep_pos+1); return true; } @@ -280,6 +282,7 @@ namespace date_time { break; } + default: break; }; pos++; } diff --git a/3party/boost/boost/date_time/time_zone_base.hpp b/3party/boost/boost/date_time/time_zone_base.hpp index 6ad7f70af5..f239d545a0 100644 --- a/3party/boost/boost/date_time/time_zone_base.hpp +++ b/3party/boost/boost/date_time/time_zone_base.hpp @@ -2,10 +2,10 @@ #define _DATE_TIME_TIME_ZONE_BASE__ /* Copyright (c) 2003-2005 CrystalClear Software, Inc. - * Subject to the Boost Software License, Version 1.0. + * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-02-27 12:00:24 -0800 (Wed, 27 Feb 2008) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ @@ -26,9 +26,9 @@ namespace date_time { * would be to convert from POSIX timezone strings. Regardless of * the construction technique, this is the interface that these * time zone types must provide. - * + * * Note that this class is intended to be used as a shared - * resource (hence the derivation from boost::counted_base. + * resource (hence the derivation from boost::counted_base. */ template class time_zone_base { @@ -39,8 +39,8 @@ namespace date_time { typedef typename time_type::date_type::year_type year_type; typedef typename time_type::time_duration_type time_duration_type; - time_zone_base() {}; - virtual ~time_zone_base() {}; + time_zone_base() {} + virtual ~time_zone_base() {} //!String for the timezone when in daylight savings (eg: EDT) virtual string_type dst_zone_abbrev() const=0; //!String for the zone when not in daylight savings (eg: EST) @@ -61,9 +61,9 @@ namespace date_time { virtual time_duration_type dst_offset() const=0; //! Returns a POSIX time_zone string for this object virtual string_type to_posix_string() const =0; - + private: - + }; @@ -82,7 +82,7 @@ namespace date_time { dst_start_offset_(dst_start_offset), dst_end_offset_(dst_end_offset) {} - + //! Amount DST adjusts the clock eg: plus one hour time_duration_type dst_adjust_; //! Time past midnight on start transition day that dst starts diff --git a/3party/boost/boost/date_time/tz_db_base.hpp b/3party/boost/boost/date_time/tz_db_base.hpp index 17822cc65c..a6d8ea9e0a 100644 --- a/3party/boost/boost/date_time/tz_db_base.hpp +++ b/3party/boost/boost/date_time/tz_db_base.hpp @@ -5,7 +5,7 @@ * Subject to the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2012-07-27 11:15:55 -0700 (Fri, 27 Jul 2012) $ + * $Date: 2012-09-22 09:04:10 -0700 (Sat, 22 Sep 2012) $ */ #include diff --git a/3party/boost/boost/date_time/wrapping_int.hpp b/3party/boost/boost/date_time/wrapping_int.hpp index abfc58c561..e6f87d52cb 100644 --- a/3party/boost/boost/date_time/wrapping_int.hpp +++ b/3party/boost/boost/date_time/wrapping_int.hpp @@ -2,11 +2,11 @@ #define _DATE_TIME_WRAPPING_INT_HPP__ /* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc. - * Use, modification and distribution is subject to the + * Use, modification and distribution is subject to the * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland, Bart Garst - * $Date: 2008-11-12 11:37:53 -0800 (Wed, 12 Nov 2008) $ + * $Date: 2012-09-22 15:33:33 -0700 (Sat, 22 Sep 2012) $ */ @@ -16,15 +16,15 @@ namespace date_time { //! A wrapping integer used to support time durations (WARNING: only instantiate with a signed type) /*! In composite date and time types this type is used to * wrap at the day boundary. - * Ex: - * A wrapping_int will roll over after nine, and + * Ex: + * A wrapping_int will roll over after nine, and * roll under below zero. This gives a range of [0,9] * - * NOTE: it is strongly recommended that wrapping_int2 be used - * instead of wrapping_int as wrapping_int is to be depricated + * NOTE: it is strongly recommended that wrapping_int2 be used + * instead of wrapping_int as wrapping_int is to be depricated * at some point soon. * - * Also Note that warnings will occur if instantiated with an + * Also Note that warnings will occur if instantiated with an * unsigned type. Only a signed type should be used! */ template @@ -34,17 +34,17 @@ public: //typedef overflow_type_ overflow_type; static int_type wrap_value() {return wrap_val;} //!Add, return true if wrapped - wrapping_int(int_type v) : value_(v) {}; + wrapping_int(int_type v) : value_(v) {} //! Explicit converion method int_type as_int() const {return value_;} operator int_type() const {return value_;} //!Add, return number of wraps performed - /*! The sign of the returned value will indicate which direction the + /*! The sign of the returned value will indicate which direction the * wraps went. Ex: add a negative number and wrapping under could occur, - * this would be indicated by a negative return value. If wrapping over + * this would be indicated by a negative return value. If wrapping over * took place, a positive value would be returned */ template< typename IntT > - IntT add(IntT v) + IntT add(IntT v) { int_type remainder = static_cast(v % (wrap_val)); IntT overflow = static_cast(v / (wrap_val)); @@ -53,12 +53,12 @@ public: } //! Subtract will return '+d' if wrapping under took place ('d' is the number of wraps) /*! The sign of the returned value will indicate which direction the - * wraps went (positive indicates wrap under, negative indicates wrap over). - * Ex: subtract a negative number and wrapping over could - * occur, this would be indicated by a negative return value. If + * wraps went (positive indicates wrap under, negative indicates wrap over). + * Ex: subtract a negative number and wrapping over could + * occur, this would be indicated by a negative return value. If * wrapping under took place, a positive value would be returned. */ template< typename IntT > - IntT subtract(IntT v) + IntT subtract(IntT v) { int_type remainder = static_cast(v % (wrap_val)); IntT underflow = static_cast(-(v / (wrap_val))); @@ -71,19 +71,19 @@ private: template< typename IntT > IntT calculate_wrap(IntT wrap) { - if ((value_) >= wrap_val) + if ((value_) >= wrap_val) { ++wrap; value_ -= (wrap_val); } - else if(value_ < 0) + else if(value_ < 0) { --wrap; value_ += (wrap_val); } return wrap; } - + }; @@ -113,12 +113,12 @@ public: int_type as_int() const {return value_;} operator int_type() const {return value_;} //!Add, return number of wraps performed - /*! The sign of the returned value will indicate which direction the + /*! The sign of the returned value will indicate which direction the * wraps went. Ex: add a negative number and wrapping under could occur, - * this would be indicated by a negative return value. If wrapping over + * this would be indicated by a negative return value. If wrapping over * took place, a positive value would be returned */ template< typename IntT > - IntT add(IntT v) + IntT add(IntT v) { int_type remainder = static_cast(v % (wrap_max - wrap_min + 1)); IntT overflow = static_cast(v / (wrap_max - wrap_min + 1)); @@ -127,30 +127,30 @@ public: } //! Subtract will return '-d' if wrapping under took place ('d' is the number of wraps) /*! The sign of the returned value will indicate which direction the - * wraps went. Ex: subtract a negative number and wrapping over could - * occur, this would be indicated by a positive return value. If + * wraps went. Ex: subtract a negative number and wrapping over could + * occur, this would be indicated by a positive return value. If * wrapping under took place, a negative value would be returned */ template< typename IntT > - IntT subtract(IntT v) + IntT subtract(IntT v) { int_type remainder = static_cast(v % (wrap_max - wrap_min + 1)); IntT underflow = static_cast(-(v / (wrap_max - wrap_min + 1))); value_ = static_cast(value_ - remainder); return calculate_wrap(underflow); } - + private: int_type value_; template< typename IntT > IntT calculate_wrap(IntT wrap) { - if ((value_) > wrap_max) + if ((value_) > wrap_max) { ++wrap; value_ -= (wrap_max - wrap_min + 1); } - else if((value_) < wrap_min) + else if((value_) < wrap_min) { --wrap; value_ += (wrap_max - wrap_min + 1); diff --git a/3party/boost/boost/detail/call_traits.hpp b/3party/boost/boost/detail/call_traits.hpp index 6ad646ec60..36dea0003a 100644 --- a/3party/boost/boost/detail/call_traits.hpp +++ b/3party/boost/boost/detail/call_traits.hpp @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -43,20 +44,26 @@ struct ct_imp2 typedef const T param_type; }; -template +template struct ct_imp { typedef const T& param_type; }; -template -struct ct_imp +template +struct ct_imp { typedef typename ct_imp2::param_type param_type; }; -template -struct ct_imp +template +struct ct_imp +{ + typedef typename ct_imp2::param_type param_type; +}; + +template +struct ct_imp { typedef const T param_type; }; @@ -79,7 +86,8 @@ public: typedef typename boost::detail::ct_imp< T, ::boost::is_pointer::value, - ::boost::is_arithmetic::value + ::boost::is_arithmetic::value, + ::boost::is_enum::value >::param_type param_type; }; diff --git a/3party/boost/boost/detail/interlocked.hpp b/3party/boost/boost/detail/interlocked.hpp index 1802e3411d..75e5a3061a 100644 --- a/3party/boost/boost/detail/interlocked.hpp +++ b/3party/boost/boost/detail/interlocked.hpp @@ -33,6 +33,21 @@ #elif defined(_WIN32_WCE) +#if _WIN32_WCE >= 0x600 + +extern "C" long __cdecl _InterlockedIncrement( long volatile * ); +extern "C" long __cdecl _InterlockedDecrement( long volatile * ); +extern "C" long __cdecl _InterlockedCompareExchange( long volatile *, long, long ); +extern "C" long __cdecl _InterlockedExchange( long volatile *, long ); +extern "C" long __cdecl _InterlockedExchangeAdd( long volatile *, long ); + +# define BOOST_INTERLOCKED_INCREMENT _InterlockedIncrement +# define BOOST_INTERLOCKED_DECREMENT _InterlockedDecrement +# define BOOST_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange +# define BOOST_INTERLOCKED_EXCHANGE _InterlockedExchange +# define BOOST_INTERLOCKED_EXCHANGE_ADD _InterlockedExchangeAdd + +#else // under Windows CE we still have old-style Interlocked* functions extern "C" long __cdecl InterlockedIncrement( long* ); @@ -47,6 +62,8 @@ extern "C" long __cdecl InterlockedExchangeAdd( long*, long ); # define BOOST_INTERLOCKED_EXCHANGE InterlockedExchange # define BOOST_INTERLOCKED_EXCHANGE_ADD InterlockedExchangeAdd +#endif + # define BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(dest,exchange,compare) \ ((void*)BOOST_INTERLOCKED_COMPARE_EXCHANGE((long*)(dest),(long)(exchange),(long)(compare))) # define BOOST_INTERLOCKED_EXCHANGE_POINTER(dest,exchange) \ diff --git a/3party/boost/boost/foreach.hpp b/3party/boost/boost/foreach.hpp index 43d84c6a1e..571b45cc73 100644 --- a/3party/boost/boost/foreach.hpp +++ b/3party/boost/boost/foreach.hpp @@ -437,7 +437,6 @@ inline T (*&to_ptr(T (&)[N]))[N] static T (*t)[N] = 0; return t; } -#endif /////////////////////////////////////////////////////////////////////////////// // derefof @@ -454,6 +453,11 @@ inline T &derefof(T *t) ); } +# define BOOST_FOREACH_DEREFOF(T) boost::foreach_detail_::derefof(*T) +#else +# define BOOST_FOREACH_DEREFOF(T) (*T) +#endif + #if defined(BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION) \ && !defined(BOOST_NO_RVALUE_REFERENCES) /////////////////////////////////////////////////////////////////////////////// @@ -667,7 +671,7 @@ begin(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iterator; return auto_any::type>( - iterator(boost::begin(derefof(auto_any_cast(col))))); + iterator(boost::begin(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION @@ -707,7 +711,7 @@ end(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_iterator::type iterator; return auto_any::type>( - iterator(boost::end(derefof(auto_any_cast(col))))); + iterator(boost::end(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION @@ -786,7 +790,7 @@ rbegin(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator::type iterator; return auto_any::type>( - iterator(boost::rbegin(derefof(auto_any_cast(col))))); + iterator(boost::rbegin(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION @@ -829,7 +833,7 @@ rend(auto_any_t col, type2type *, boost::mpl::false_ *) // lvalue typedef BOOST_DEDUCED_TYPENAME type2type::type type; typedef BOOST_DEDUCED_TYPENAME foreach_reverse_iterator::type iterator; return auto_any::type>( - iterator(boost::rend(derefof(auto_any_cast(col))))); + iterator(boost::rend(BOOST_FOREACH_DEREFOF((auto_any_cast(col)))))); } #ifdef BOOST_FOREACH_RUN_TIME_CONST_RVALUE_DETECTION diff --git a/3party/boost/boost/function/function_template.hpp b/3party/boost/boost/function/function_template.hpp index bf139a0957..f9699d0552 100644 --- a/3party/boost/boost/function/function_template.hpp +++ b/3party/boost/boost/function/function_template.hpp @@ -748,7 +748,14 @@ namespace boost { { this->assign_to_own(f); } - + +#ifndef BOOST_NO_RVALUE_REFERENCES + BOOST_FUNCTION_FUNCTION(BOOST_FUNCTION_FUNCTION&& f) : function_base() + { + this->move_assign(f); + } +#endif + ~BOOST_FUNCTION_FUNCTION() { clear(); } result_type operator()(BOOST_FUNCTION_PARMS) const @@ -830,6 +837,26 @@ namespace boost { BOOST_CATCH_END return *this; } + +#ifndef BOOST_NO_RVALUE_REFERENCES + // Move assignment from another BOOST_FUNCTION_FUNCTION + BOOST_FUNCTION_FUNCTION& operator=(BOOST_FUNCTION_FUNCTION&& f) + { + + if (&f == this) + return *this; + + this->clear(); + BOOST_TRY { + this->move_assign(f); + } BOOST_CATCH (...) { + vtable = 0; + BOOST_RETHROW; + } + BOOST_CATCH_END + return *this; + } +#endif void swap(BOOST_FUNCTION_FUNCTION& other) { @@ -1063,12 +1090,26 @@ public: function(const base_type& f) : base_type(static_cast(f)){} +#ifndef BOOST_NO_RVALUE_REFERENCES + // Move constructors + function(self_type&& f): base_type(static_cast(f)){} + function(base_type&& f): base_type(static_cast(f)){} +#endif + self_type& operator=(const self_type& f) { self_type(f).swap(*this); return *this; } +#ifndef BOOST_NO_RVALUE_REFERENCES + self_type& operator=(self_type&& f) + { + self_type(static_cast(f)).swap(*this); + return *this; + } +#endif + template #ifndef BOOST_NO_SFINAE typename enable_if_c< @@ -1097,6 +1138,14 @@ public: self_type(f).swap(*this); return *this; } + +#ifndef BOOST_NO_RVALUE_REFERENCES + self_type& operator=(base_type&& f) + { + self_type(static_cast(f)).swap(*this); + return *this; + } +#endif }; #undef BOOST_FUNCTION_PARTIAL_SPEC diff --git a/3party/boost/boost/functional/detail/container_fwd.hpp b/3party/boost/boost/functional/detail/container_fwd.hpp index e2bf86526c..6970472469 100644 --- a/3party/boost/boost/functional/detail/container_fwd.hpp +++ b/3party/boost/boost/functional/detail/container_fwd.hpp @@ -7,21 +7,4 @@ // This header is deprecated, I'll change the warning to an error in a future // release, and then later remove the header completely. -#if !defined(BOOST_FUNCTIONAL_DETAIL_CONTAINER_FWD_HPP) -#define BOOST_FUNCTIONAL_DETAIL_CONTAINER_FWD_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -#if defined(__EDG__) -#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__) -#pragma message("Warning: boost/functional/detail/container_fwd.hpp is deprecated, use boost/detail/container_fwd.hpp instead.") -#elif defined(__GNUC__) || defined(__HP_aCC) || \ - defined(__SUNPRO_CC) || defined(__IBMCPP__) -#warning "boost/functional/detail/container_fwd.hpp is deprecated, use boost/detail/container_fwd.hpp instead." -#endif - -#include - -#endif +#error "boost/functional/detail/container_fwd.hpp is deprecated, use boost/detail/container_fwd.hpp instead." diff --git a/3party/boost/boost/functional/hash/detail/hash_float.hpp b/3party/boost/boost/functional/hash/detail/hash_float.hpp index 194be1cae5..3edc6ab160 100644 --- a/3party/boost/boost/functional/hash/detail/hash_float.hpp +++ b/3party/boost/boost/functional/hash/detail/hash_float.hpp @@ -1,5 +1,5 @@ -// Copyright 2005-2009 Daniel James. +// Copyright 2005-2012 Daniel James. // 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) @@ -13,21 +13,19 @@ #include #include #include +#include #include #include #include +#include +#include -// Include hash implementation for the current platform. - -// Cygwn -#if defined(__CYGWIN__) -# if defined(__i386__) || defined(_M_IX86) -# include -# else -# include -# endif -#else -# include +#if defined(BOOST_MSVC) +#pragma warning(push) +#if BOOST_MSVC >= 1400 +#pragma warning(disable:6294) // Ill-defined for-loop: initial condition does + // not satisfy test. Loop body not executed +#endif #endif // Can we use fpclassify? @@ -50,6 +48,157 @@ # define BOOST_HASH_USE_FPCLASSIFY 0 #endif +namespace boost +{ + namespace hash_detail + { + inline void hash_float_combine(std::size_t& seed, std::size_t value) + { + seed ^= value + (seed<<6) + (seed>>2); + } + + //////////////////////////////////////////////////////////////////////// + // Binary hash function + // + // Only used for floats with known iec559 floats, and certain values in + // numeric_limits + + inline std::size_t hash_binary(char* ptr, std::size_t length) + { + std::size_t seed = 0; + + if (length >= sizeof(std::size_t)) { + seed = *(std::size_t*) ptr; + length -= sizeof(std::size_t); + ptr += sizeof(std::size_t); + + while(length >= sizeof(std::size_t)) { + hash_float_combine(seed, *(std::size_t*) ptr); + length -= sizeof(std::size_t); + ptr += sizeof(std::size_t); + } + } + + if (length > 0) { + std::size_t buffer = 0; + std::memcpy(&buffer, ptr, length); + hash_float_combine(seed, buffer); + } + + return seed; + } + + template + inline std::size_t float_hash_impl(Float v, + BOOST_DEDUCED_TYPENAME boost::enable_if_c< + std::numeric_limits::is_iec559 && + std::numeric_limits::digits == 24 && + std::numeric_limits::radix == 2 && + std::numeric_limits::max_exponent == 128, + int>::type + ) + { + return hash_binary((char*) &v, 4); + } + + + template + inline std::size_t float_hash_impl(Float v, + BOOST_DEDUCED_TYPENAME boost::enable_if_c< + std::numeric_limits::is_iec559 && + std::numeric_limits::digits == 53 && + std::numeric_limits::radix == 2 && + std::numeric_limits::max_exponent == 1024, + int>::type + ) + { + return hash_binary((char*) &v, 8); + } + + template + inline std::size_t float_hash_impl(Float v, + BOOST_DEDUCED_TYPENAME boost::enable_if_c< + std::numeric_limits::is_iec559 && + std::numeric_limits::digits == 64 && + std::numeric_limits::radix == 2 && + std::numeric_limits::max_exponent == 16384, + int>::type + ) + { + return hash_binary((char*) &v, 10); + } + + template + inline std::size_t float_hash_impl(Float v, + BOOST_DEDUCED_TYPENAME boost::enable_if_c< + std::numeric_limits::is_iec559 && + std::numeric_limits::digits == 113 && + std::numeric_limits::radix == 2 && + std::numeric_limits::max_exponent == 16384, + int>::type + ) + { + return hash_binary((char*) &v, 16); + } + + //////////////////////////////////////////////////////////////////////// + // Portable hash function + // + // Used as a fallback when the binary hash function isn't supported. + + template + inline std::size_t float_hash_impl2(T v) + { + boost::hash_detail::call_frexp frexp; + boost::hash_detail::call_ldexp ldexp; + + int exp = 0; + + v = frexp(v, &exp); + + // A postive value is easier to hash, so combine the + // sign with the exponent and use the absolute value. + if(v < 0) { + v = -v; + exp += limits::max_exponent - + limits::min_exponent; + } + + v = ldexp(v, limits::digits); + std::size_t seed = static_cast(v); + v -= static_cast(seed); + + // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1; + std::size_t const length + = (limits::digits * + boost::static_log2::radix>::value + + limits::digits - 1) + / limits::digits; + + for(std::size_t i = 0; i != length; ++i) + { + v = ldexp(v, limits::digits); + std::size_t part = static_cast(v); + v -= static_cast(part); + hash_float_combine(seed, part); + } + + hash_float_combine(seed, exp); + + return seed; + } + +#if !defined(BOOST_HASH_DETAIL_TEST_WITHOUT_GENERIC) + template + inline std::size_t float_hash_impl(T v, ...) + { + typedef BOOST_DEDUCED_TYPENAME select_hash_type::type type; + return float_hash_impl2(static_cast(v)); + } +#endif + } +} + #if BOOST_HASH_USE_FPCLASSIFY #include @@ -71,7 +220,7 @@ namespace boost return (std::size_t)(-3); case FP_NORMAL: case FP_SUBNORMAL: - return float_hash_impl(v); + return float_hash_impl(v, 0); default: BOOST_ASSERT(0); return 0; @@ -103,7 +252,7 @@ namespace boost template inline std::size_t float_hash_value(T v) { - return boost::hash_detail::is_zero(v) ? 0 : float_hash_impl(v); + return boost::hash_detail::is_zero(v) ? 0 : float_hash_impl(v, 0); } } } @@ -112,4 +261,8 @@ namespace boost #undef BOOST_HASH_USE_FPCLASSIFY +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + #endif diff --git a/3party/boost/boost/functional/hash/detail/hash_float_generic.hpp b/3party/boost/boost/functional/hash/detail/hash_float_generic.hpp deleted file mode 100644 index 1278c2f626..0000000000 --- a/3party/boost/boost/functional/hash/detail/hash_float_generic.hpp +++ /dev/null @@ -1,91 +0,0 @@ - -// Copyright 2005-2009 Daniel James. -// 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) - -// A general purpose hash function for non-zero floating point values. - -#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_GENERIC_HEADER) -#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_GENERIC_HEADER - -#include -#include -#include - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -#if defined(BOOST_MSVC) -#pragma warning(push) -#if BOOST_MSVC >= 1400 -#pragma warning(disable:6294) // Ill-defined for-loop: initial condition does - // not satisfy test. Loop body not executed -#endif -#endif - -namespace boost -{ - namespace hash_detail - { - inline void hash_float_combine(std::size_t& seed, std::size_t value) - { - seed ^= value + (seed<<6) + (seed>>2); - } - - template - inline std::size_t float_hash_impl2(T v) - { - boost::hash_detail::call_frexp frexp; - boost::hash_detail::call_ldexp ldexp; - - int exp = 0; - - v = frexp(v, &exp); - - // A postive value is easier to hash, so combine the - // sign with the exponent and use the absolute value. - if(v < 0) { - v = -v; - exp += limits::max_exponent - - limits::min_exponent; - } - - v = ldexp(v, limits::digits); - std::size_t seed = static_cast(v); - v -= static_cast(seed); - - // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1; - std::size_t const length - = (limits::digits * - boost::static_log2::radix>::value - + limits::digits - 1) - / limits::digits; - - for(std::size_t i = 0; i != length; ++i) - { - v = ldexp(v, limits::digits); - std::size_t part = static_cast(v); - v -= static_cast(part); - hash_float_combine(seed, part); - } - - hash_float_combine(seed, exp); - - return seed; - } - - template - inline std::size_t float_hash_impl(T v) - { - typedef BOOST_DEDUCED_TYPENAME select_hash_type::type type; - return float_hash_impl2(static_cast(v)); - } - } -} - -#if defined(BOOST_MSVC) -#pragma warning(pop) -#endif - -#endif diff --git a/3party/boost/boost/functional/hash/detail/hash_float_x86.hpp b/3party/boost/boost/functional/hash/detail/hash_float_x86.hpp deleted file mode 100644 index b39bb0d081..0000000000 --- a/3party/boost/boost/functional/hash/detail/hash_float_x86.hpp +++ /dev/null @@ -1,56 +0,0 @@ - -// Copyright 2005-2009 Daniel James. -// 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) - -// A non-portable hash function form non-zero floats on x86. -// -// Even if you're on an x86 platform, this might not work if their floating -// point isn't set up as this expects. So this should only be used if it's -// absolutely certain that it will work. - -#if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_X86_HEADER) -#define BOOST_FUNCTIONAL_HASH_DETAIL_HASH_FLOAT_X86_HEADER - -#include - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -namespace boost -{ - namespace hash_detail - { - inline void hash_float_combine(std::size_t& seed, std::size_t value) - { - seed ^= value + (seed<<6) + (seed>>2); - } - - inline std::size_t float_hash_impl(float v) - { - boost::uint32_t* ptr = (boost::uint32_t*)&v; - std::size_t seed = *ptr; - return seed; - } - - inline std::size_t float_hash_impl(double v) - { - boost::uint32_t* ptr = (boost::uint32_t*)&v; - std::size_t seed = *ptr++; - hash_float_combine(seed, *ptr); - return seed; - } - - inline std::size_t float_hash_impl(long double v) - { - boost::uint32_t* ptr = (boost::uint32_t*)&v; - std::size_t seed = *ptr++; - hash_float_combine(seed, *ptr++); - hash_float_combine(seed, *(boost::uint16_t*)ptr); - return seed; - } - } -} - -#endif diff --git a/3party/boost/boost/functional/hash/hash.hpp b/3party/boost/boost/functional/hash/hash.hpp index c179fab69a..647fd68b30 100644 --- a/3party/boost/boost/functional/hash/hash.hpp +++ b/3party/boost/boost/functional/hash/hash.hpp @@ -15,6 +15,8 @@ #include #include #include +#include +#include #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) #include @@ -90,6 +92,10 @@ namespace boost template typename boost::hash_detail::ulong_numbers::type hash_value(T); + template + typename boost::enable_if, std::size_t>::type + hash_value(T); + #if !BOOST_WORKAROUND(__DMC__, <= 0x848) template std::size_t hash_value(T* const&); #else @@ -179,6 +185,13 @@ namespace boost return hash_detail::hash_value_unsigned(v); } + template + typename boost::enable_if, std::size_t>::type + hash_value(T v) + { + return static_cast(v); + } + // Implementation by Alberto Barbati and Dave Harris. #if !BOOST_WORKAROUND(__DMC__, <= 0x848) template std::size_t hash_value(T* const& v) diff --git a/3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp b/3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp index a7961ec311..7bc5fe08af 100644 --- a/3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp +++ b/3party/boost/boost/fusion/adapted/struct/detail/define_struct_inline.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -61,15 +62,20 @@ BOOST_PP_COMMA_IF(N) \ BOOST_FUSION_MAKE_INIT_LIST_ENTRY_I(BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)) +#define BOOST_FUSION_ITERATOR_NAME(NAME) \ + BOOST_PP_CAT(boost_fusion_detail_, BOOST_PP_CAT(NAME, _iterator)) + // Note: all template parameter names need to be uglified, otherwise they might // shadow a template parameter of the struct when used with // BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE #define BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS(Z, N, NAME) \ - template \ - struct value_of > \ + template \ + struct value_of< \ + BOOST_FUSION_ITERATOR_NAME(NAME) \ + > \ : boost::mpl::identity< \ - typename boost_fusion_uglified_Sq::t##N##_type \ + typename boost_fusion_detail_Sq::t##N##_type \ > \ { \ }; @@ -77,10 +83,10 @@ #define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \ SPEC_TYPE, CALL_ARG_TYPE, TYPE_QUAL, ATTRIBUTE, N) \ \ - template \ + template \ struct deref > \ { \ - typedef typename boost_fusion_uglified_Sq::t##N##_type TYPE_QUAL& type; \ + typedef typename boost_fusion_detail_Sq::t##N##_type TYPE_QUAL& type; \ static type call(CALL_ARG_TYPE, N> const& iter) \ { \ return iter.seq_.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \ @@ -89,48 +95,48 @@ #define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS(R, NAME, N, ATTRIBUTE) \ BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \ - BOOST_PP_CAT(NAME, _iterator) \ - struct value_at > \ + template \ + struct value_at > \ { \ - typedef typename boost_fusion_uglified_Sq::t##N##_type type; \ + typedef typename boost_fusion_detail_Sq::t##N##_type type; \ }; #define BOOST_FUSION_MAKE_AT_SPECS(R, DATA, N, ATTRIBUTE) \ - template \ - struct at > \ + template \ + struct at > \ { \ typedef typename boost::mpl::if_< \ - boost::is_const, \ - typename boost_fusion_uglified_Sq::t##N##_type const&, \ - typename boost_fusion_uglified_Sq::t##N##_type& \ + boost::is_const, \ + typename boost_fusion_detail_Sq::t##N##_type const&, \ + typename boost_fusion_detail_Sq::t##N##_type& \ >::type type; \ \ - static type call(boost_fusion_uglified_Sq& sq) \ + static type call(boost_fusion_detail_Sq& sq) \ { \ return sq. BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \ } \ @@ -142,7 +148,11 @@ #define BOOST_FUSION_MAKE_DATA_MEMBER(R, DATA, N, ATTRIBUTE) \ BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); +// Note: We can't nest the iterator inside the struct because we run into +// a MSVC10 bug involving partial specializations of nested templates. + #define BOOST_FUSION_DEFINE_STRUCT_INLINE_IMPL(NAME, ATTRIBUTES) \ + BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \ struct NAME : boost::fusion::sequence_facade< \ NAME, \ boost::fusion::random_access_traversal_tag \ @@ -154,6 +164,8 @@ #define BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE_IMPL( \ TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES) \ \ + BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \ + \ template < \ BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL( \ (0)TEMPLATE_PARAMS_SEQ) \ @@ -173,176 +185,201 @@ NAME, \ BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END)) +// Note: can't compute BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ) directly because +// ATTRIBUTES_SEQ may be empty and calling BOOST_PP_SEQ_SIZE on an empty +// sequence produces warnings on MSVC. #define BOOST_FUSION_DEFINE_STRUCT_MEMBERS_IMPL(NAME, ATTRIBUTES_SEQ) \ BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \ NAME, \ ATTRIBUTES_SEQ, \ - BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ)) + BOOST_PP_DEC(BOOST_PP_SEQ_SIZE((0)ATTRIBUTES_SEQ))) -#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \ +#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \ + BOOST_FUSION_DEFINE_STRUCT_ITERATOR_IMPL( \ + NAME, \ + BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END)) + +#define BOOST_FUSION_DEFINE_STRUCT_ITERATOR_IMPL(NAME, ATTRIBUTES_SEQ) \ + BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \ + NAME, \ + ATTRIBUTES_SEQ, \ + BOOST_PP_DEC(BOOST_PP_SEQ_SIZE((0)ATTRIBUTES_SEQ))) + +#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \ NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \ \ - NAME() \ - BOOST_PP_IF( \ - BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ - BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \ - BOOST_FUSION_IGNORE_1) \ - (ATTRIBUTES_SEQ) \ - { \ - } \ - \ - BOOST_PP_IF( \ - BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \ - BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \ - BOOST_FUSION_IGNORE_2) \ - (NAME, ATTRIBUTES_SEQ) \ - \ - template \ - NAME(const boost_fusion_uglified_Seq& rhs) \ - { \ - boost::fusion::copy(rhs, *this); \ - } \ - \ - template \ - NAME& operator=(const boost_fusion_uglified_Seq& rhs) \ - { \ - boost::fusion::copy(rhs, *this); \ - return *this; \ - } \ - \ - template \ - struct NAME##_iterator \ + template \ + struct BOOST_FUSION_ITERATOR_NAME(NAME) \ : boost::fusion::iterator_facade< \ - NAME##_iterator, \ + BOOST_FUSION_ITERATOR_NAME(NAME), \ boost::fusion::random_access_traversal_tag \ > \ { \ typedef boost::mpl::int_ index; \ - typedef boost_fusion_uglified_Seq sequence_type; \ + typedef boost_fusion_detail_Seq sequence_type; \ \ - NAME##_iterator(boost_fusion_uglified_Seq& seq) : seq_(seq) {} \ + BOOST_FUSION_ITERATOR_NAME(NAME)(boost_fusion_detail_Seq& seq) \ + : seq_(seq) {} \ \ - boost_fusion_uglified_Seq& seq_; \ + boost_fusion_detail_Seq& seq_; \ \ - template struct value_of; \ + template struct value_of; \ BOOST_PP_REPEAT( \ ATTRIBUTES_SEQ_SIZE, \ BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS, \ NAME) \ \ - template struct deref; \ + template struct deref; \ BOOST_PP_SEQ_FOR_EACH_I( \ BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS, \ NAME, \ ATTRIBUTES_SEQ) \ \ - template \ + template \ struct next \ { \ - typedef NAME##_iterator< \ - typename boost_fusion_uglified_It::sequence_type, \ - boost_fusion_uglified_It::index::value + 1 \ + typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \ + typename boost_fusion_detail_It::sequence_type, \ + boost_fusion_detail_It::index::value + 1 \ > type; \ \ - static type call(boost_fusion_uglified_It const& it) \ + static type call(boost_fusion_detail_It const& it) \ { \ return type(it.seq_); \ } \ }; \ \ - template \ + template \ struct prior \ { \ - typedef NAME##_iterator< \ - typename boost_fusion_uglified_It::sequence_type, \ - boost_fusion_uglified_It::index::value - 1 \ + typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \ + typename boost_fusion_detail_It::sequence_type, \ + boost_fusion_detail_It::index::value - 1 \ > type; \ \ - static type call(boost_fusion_uglified_It const& it) \ + static type call(boost_fusion_detail_It const& it) \ { \ return type(it.seq_); \ } \ }; \ \ template < \ - typename boost_fusion_uglified_It1, \ - typename boost_fusion_uglified_It2 \ + typename boost_fusion_detail_It1, \ + typename boost_fusion_detail_It2 \ > \ struct distance \ { \ typedef typename boost::mpl::minus< \ - typename boost_fusion_uglified_It2::index, \ - typename boost_fusion_uglified_It1::index \ + typename boost_fusion_detail_It2::index, \ + typename boost_fusion_detail_It1::index \ >::type type; \ \ - static type call(boost_fusion_uglified_It1 const& it1, \ - boost_fusion_uglified_It2 const& it2) \ + static type call(boost_fusion_detail_It1 const& it1, \ + boost_fusion_detail_It2 const& it2) \ { \ return type(); \ } \ }; \ \ template < \ - typename boost_fusion_uglified_It, \ - typename boost_fusion_uglified_M \ + typename boost_fusion_detail_It, \ + typename boost_fusion_detail_M \ > \ struct advance \ { \ - typedef NAME##_iterator< \ - typename boost_fusion_uglified_It::sequence_type, \ - boost_fusion_uglified_It::index::value \ - + boost_fusion_uglified_M::value \ + typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \ + typename boost_fusion_detail_It::sequence_type, \ + boost_fusion_detail_It::index::value \ + + boost_fusion_detail_M::value \ > type; \ \ - static type call(boost_fusion_uglified_It const& it) \ + static type call(boost_fusion_detail_It const& it) \ { \ return type(it.seq_); \ } \ }; \ - }; \ + }; + + +#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \ + NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \ \ - template \ + /* Note: second BOOST_PP_IF is necessary to avoid MSVC warning when */ \ + /* calling BOOST_FUSION_IGNORE_1 with no arguments. */ \ + NAME() \ + BOOST_PP_IF( \ + ATTRIBUTES_SEQ_SIZE, \ + BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \ + BOOST_FUSION_IGNORE_1) \ + (BOOST_PP_IF( \ + ATTRIBUTES_SEQ_SIZE, \ + ATTRIBUTES_SEQ, \ + 0)) \ + { \ + } \ + \ + BOOST_PP_IF( \ + ATTRIBUTES_SEQ_SIZE, \ + BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \ + BOOST_FUSION_IGNORE_2) \ + (NAME, ATTRIBUTES_SEQ) \ + \ + template \ + NAME(const boost_fusion_detail_Seq& rhs) \ + { \ + boost::fusion::copy(rhs, *this); \ + } \ + \ + template \ + NAME& operator=(const boost_fusion_detail_Seq& rhs) \ + { \ + boost::fusion::copy(rhs, *this); \ + return *this; \ + } \ + \ + template \ struct begin \ { \ - typedef NAME##_iterator type; \ + typedef BOOST_FUSION_ITERATOR_NAME(NAME) \ + type; \ \ - static type call(boost_fusion_uglified_Sq& sq) \ + static type call(boost_fusion_detail_Sq& sq) \ { \ return type(sq); \ } \ }; \ \ - template \ + template \ struct end \ { \ - typedef NAME##_iterator< \ - boost_fusion_uglified_Sq, \ + typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \ + boost_fusion_detail_Sq, \ ATTRIBUTES_SEQ_SIZE \ > type; \ \ - static type call(boost_fusion_uglified_Sq& sq) \ + static type call(boost_fusion_detail_Sq& sq) \ { \ return type(sq); \ } \ }; \ \ - template \ + template \ struct size : boost::mpl::int_ \ { \ }; \ \ - template \ + template \ struct empty : boost::mpl::bool_ \ { \ }; \ \ template < \ - typename boost_fusion_uglified_Sq, \ - typename boost_fusion_uglified_N \ + typename boost_fusion_detail_Sq, \ + typename boost_fusion_detail_N \ > \ struct value_at : value_at< \ - boost_fusion_uglified_Sq, \ - boost::mpl::int_ \ + boost_fusion_detail_Sq, \ + boost::mpl::int_ \ > \ { \ }; \ @@ -353,12 +390,12 @@ ~) \ \ template < \ - typename boost_fusion_uglified_Sq, \ - typename boost_fusion_uglified_N \ + typename boost_fusion_detail_Sq, \ + typename boost_fusion_detail_N \ > \ struct at : at< \ - boost_fusion_uglified_Sq, \ - boost::mpl::int_ \ + boost_fusion_detail_Sq, \ + boost::mpl::int_ \ > \ { \ }; \ diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp index d368338a0b..c89a7ddad1 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp @@ -116,7 +116,7 @@ namespace boost { namespace fusion { template static Result - call(State const& state,It0 const& it0, F) + call(State const& state,It0 const&, F) { return static_cast(state); } diff --git a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp index 71730abf07..48a4134467 100644 --- a/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp +++ b/3party/boost/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp @@ -115,7 +115,7 @@ namespace boost { namespace fusion { template static Result - call(State const& state,It0 const& it0, F) + call(State const& state,It0 const&, F) { return static_cast(state); } diff --git a/3party/boost/boost/fusion/algorithm/query/detail/any.hpp b/3party/boost/boost/fusion/algorithm/query/detail/any.hpp index 42409d5a13..5f6b85772a 100644 --- a/3party/boost/boost/fusion/algorithm/query/detail/any.hpp +++ b/3party/boost/boost/fusion/algorithm/query/detail/any.hpp @@ -109,7 +109,7 @@ namespace detail struct unrolled_any<0> { template - static bool call(It const& it, F f) + static bool call(It const&, F) { return false; } diff --git a/3party/boost/boost/fusion/container/deque/deque.hpp b/3party/boost/boost/fusion/container/deque/deque.hpp index 215981e422..56ae290e0c 100644 --- a/3party/boost/boost/fusion/container/deque/deque.hpp +++ b/3party/boost/boost/fusion/container/deque/deque.hpp @@ -11,24 +11,23 @@ #include /////////////////////////////////////////////////////////////////////////////// -// With no decltype and variadics, we will use the C++03 version +// With variadics, we will use the PP version version /////////////////////////////////////////////////////////////////////////////// -#if (defined(BOOST_NO_DECLTYPE) \ - || defined(BOOST_NO_VARIADIC_TEMPLATES) \ - || defined(BOOST_NO_RVALUE_REFERENCES)) -# include +#if defined(BOOST_NO_VARIADIC_TEMPLATES) +# include #else -# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE) -# define BOOST_FUSION_HAS_CPP11_DEQUE +# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) +# define BOOST_FUSION_HAS_VARIADIC_DEQUE # endif /////////////////////////////////////////////////////////////////////////////// -// C++11 interface +// C++11 variadic interface /////////////////////////////////////////////////////////////////////////////// #include #include +#include #include -#include +#include #include #include #include @@ -36,8 +35,10 @@ #include #include #include +#include #include +#include #include #include @@ -48,6 +49,22 @@ namespace boost { namespace fusion template struct deque : detail::nil_keyed_element { + typedef deque_tag fusion_tag; + typedef bidirectional_traversal_tag category; + typedef mpl::int_<0> size; + typedef mpl::int_<0> next_up; + typedef mpl::int_<0> next_down; + typedef mpl::false_ is_view; + + template + deque(Sequence const&, + typename enable_if< + mpl::and_< + traits::is_sequence + , result_of::empty>>::type* /*dummy*/ = 0) + {} + + deque() {} }; template @@ -60,7 +77,7 @@ namespace boost { namespace fusion typedef typename detail::deque_keyed_values::type base; typedef mpl::int_<(sizeof ...(Tail) + 1)> size; typedef mpl::int_ next_up; - typedef mpl::int_::type::value> next_down; + typedef mpl::int_<((size::value == 0) ? 0 : -1)> next_down; typedef mpl::false_ is_view; deque() @@ -71,11 +88,45 @@ namespace boost { namespace fusion : base(seq) {} - explicit deque(typename detail::call_param::type head - , typename detail::call_param::type... tail) - : base(detail::deque_keyed_values::call(head, tail...)) + template + deque(deque& seq) + : base(seq) {} +#if !defined(BOOST_NO_RVALUE_REFERENCES) + template + deque(deque&& seq) + : base(std::forward>(seq)) + {} +#endif + + deque(deque const& seq) + : base(seq) + {} + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + deque(deque&& seq) + : base(std::forward(seq)) + {} +#endif + + explicit deque(Head const& head, Tail const&... tail) + : base(detail::deque_keyed_values::construct(head, tail...)) + {} + + template + explicit deque(Head_ const& head, Tail_ const&... tail) + : base(detail::deque_keyed_values::construct(head, tail...)) + {} + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + template + explicit deque(Head_&& head, Tail_&&... tail) + : base(detail::deque_keyed_values + ::forward_(std::forward(head), std::forward(tail)...)) + {} +#endif + template explicit deque(Sequence const& seq , typename disable_if >::type* /*dummy*/ = 0) @@ -95,6 +146,16 @@ namespace boost { namespace fusion base::operator=(rhs); return *this; } + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + template + deque& operator=(T&& rhs) + { + base::operator=(std::forward(rhs)); + return *this; + } +#endif + }; }} diff --git a/3party/boost/boost/fusion/container/deque/deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/deque_fwd.hpp index 19ca8f8f19..fc1f9cbde3 100644 --- a/3party/boost/boost/fusion/container/deque/deque_fwd.hpp +++ b/3party/boost/boost/fusion/container/deque/deque_fwd.hpp @@ -16,10 +16,10 @@ #if (defined(BOOST_NO_DECLTYPE) \ || defined(BOOST_NO_VARIADIC_TEMPLATES) \ || defined(BOOST_NO_RVALUE_REFERENCES)) -# include +# include #else -# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE) -# define BOOST_FUSION_HAS_CPP11_DEQUE +# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) +# define BOOST_FUSION_HAS_VARIADIC_DEQUE # endif /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp b/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp index b76916ebd8..44d279f62f 100644 --- a/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/deque_forward_ctor.hpp @@ -9,10 +9,12 @@ #if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212) #define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212 -#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif +#define FUSION_DEQUE_FORWARD_CTOR_FORWARD(z, n, _) std::forward(t##n) + #include #include #include @@ -22,14 +24,22 @@ #define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_DEQUE_SIZE) #include BOOST_PP_ITERATE() +#undef FUSION_DEQUE_FORWARD_CTOR_FORWARD #endif #else #define N BOOST_PP_ITERATION() deque(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference::type>::type t)) - : base(detail::deque_keyed_values::call(BOOST_PP_ENUM_PARAMS(N, t))) + : base(detail::deque_keyed_values::construct(BOOST_PP_ENUM_PARAMS(N, t))) {} +#if !defined(BOOST_NO_RVALUE_REFERENCES) +deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && t)) + : base(detail::deque_keyed_values:: + forward_(BOOST_PP_ENUM(N, FUSION_DEQUE_FORWARD_CTOR_FORWARD, _))) +{} +#endif + #undef N #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp b/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp index edb3c176cc..21075ef47f 100644 --- a/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/deque_initial_size.hpp @@ -8,7 +8,7 @@ #if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139) #define BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139 -#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp b/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp index f95960bcfc..d457516fc5 100644 --- a/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/deque_keyed_values_call.hpp @@ -9,25 +9,30 @@ #if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211) #define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211 -#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif #include #include +#include #include +#define FUSION_DEQUE_KEYED_VALUES_FORWARD(z, n, _) \ + std::forward(BOOST_PP_CAT(t, n)) + #define BOOST_PP_FILENAME_1 \ #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE) #include BOOST_PP_ITERATE() +#undef FUSION_DEQUE_KEYED_VALUES_FORWARD #endif #else #define N BOOST_PP_ITERATION() - static type call(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference::type>::type t)) + static type construct(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference::type>::type t)) { return type(t0, deque_keyed_values_impl< @@ -38,5 +43,16 @@ >::call(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t))); } + static type forward_(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && t)) + { + return type(std::forward(t0), + deque_keyed_values_impl< + next_index + #if N > 1 + , BOOST_PP_ENUM_SHIFTED_PARAMS(N, T) + #endif + >::forward_(BOOST_PP_ENUM_SHIFTED(N, FUSION_DEQUE_KEYED_VALUES_FORWARD, _))); + } + #undef N #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp b/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp index d1b219dee7..e5bdc2abd3 100644 --- a/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/keyed_element.hpp @@ -47,16 +47,42 @@ namespace boost { namespace fusion { namespace detail *it, base::from_iterator(fusion::next(it))); } + keyed_element(keyed_element const& rhs) + : Rest(rhs.get_base()), value_(rhs.value_) + {} + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + keyed_element(keyed_element&& rhs) + : Rest(std::forward(rhs.forward_base())) + , value_(std::forward(rhs.value_)) + {} +#endif + template keyed_element(keyed_element const& rhs) : Rest(rhs.get_base()), value_(rhs.value_) {} - Rest const get_base() const +#if !defined(BOOST_NO_RVALUE_REFERENCES) +#endif + + Rest& get_base() { return *this; } + Rest const& get_base() const + { + return *this; + } + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + Rest&& forward_base() + { + return std::forward(*static_cast(this)); + } +#endif + typename cref_result::type get(Key) const { return value_; @@ -67,10 +93,19 @@ namespace boost { namespace fusion { namespace detail return value_; } - keyed_element(typename call_param::type value, Rest const& rest) + keyed_element( + typename detail::call_param::type value + , Rest const& rest) : Rest(rest), value_(value) {} +#if !defined(BOOST_NO_RVALUE_REFERENCES) + keyed_element(Value&& value, Rest&& rest) + : Rest(std::forward(rest)) + , value_(std::forward(value)) + {} +#endif + keyed_element() : Rest(), value_() {} @@ -90,6 +125,15 @@ namespace boost { namespace fusion { namespace detail return *this; } +#if !defined(BOOST_NO_RVALUE_REFERENCES) + keyed_element& operator=(keyed_element&& rhs) + { + base::operator=(std::forward(rhs)); + value_ = std::forward(rhs.value_); + return *this; + } +#endif + Value value_; }; diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque.hpp b/3party/boost/boost/fusion/container/deque/detail/pp_deque.hpp similarity index 78% rename from 3party/boost/boost/fusion/container/deque/detail/cpp03_deque.hpp rename to 3party/boost/boost/fusion/container/deque/detail/pp_deque.hpp index 5804d89006..7913b67ba1 100644 --- a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/pp_deque.hpp @@ -5,17 +5,17 @@ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ -#if !defined(BOOST_CPP03_FUSION_DEQUE_26112006_1649) -#define BOOST_CPP03_FUSION_DEQUE_26112006_1649 +#if !defined(BOOST_PP_FUSION_DEQUE_26112006_1649) +#define BOOST_PP_FUSION_DEQUE_26112006_1649 -#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif #include #include #include -#include +#include #include #include #include @@ -87,13 +87,34 @@ namespace boost { namespace fusion { : base(t0, detail::nil_keyed_element()) {} + explicit deque(deque const& rhs) + : base(rhs) + {} + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + explicit deque(T0&& t0) + : base(std::forward(t0), detail::nil_keyed_element()) + {} + + explicit deque(deque&& rhs) + : base(std::forward(rhs)) + {} +#endif + template - deque(deque const& seq) + deque(deque const& seq) : base(seq) {} +#if !defined(BOOST_NO_RVALUE_REFERENCES) + template + deque(deque&& seq) + : base(std::forward>(seq)) + {} +#endif + template - deque(Sequence const& seq, typename disable_if >::type* /*dummy*/ = 0) + deque(Sequence const& seq, typename disable_if >::type* /*dummy*/ = 0) : base(base::from_iterator(fusion::begin(seq))) {} @@ -113,6 +134,16 @@ namespace boost { namespace fusion { return *this; } +#if !defined(BOOST_NO_RVALUE_REFERENCES) + template + deque& + operator=(T&& rhs) + { + base::operator=(std::forward(rhs)); + return *this; + } +#endif + }; }} diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp b/3party/boost/boost/fusion/container/deque/detail/pp_deque_fwd.hpp similarity index 92% rename from 3party/boost/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp rename to 3party/boost/boost/fusion/container/deque/detail/pp_deque_fwd.hpp index 3a74447b17..354cfccdc1 100644 --- a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/pp_deque_fwd.hpp @@ -5,10 +5,10 @@ Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ -#if !defined(FUSION_CPP03_DEQUE_FORWARD_02092007_0749) -#define FUSION_CPP03_DEQUE_FORWARD_02092007_0749 +#if !defined(FUSION_PP_DEQUE_FORWARD_02092007_0749) +#define FUSION_PP_DEQUE_FORWARD_02092007_0749 -#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp similarity index 96% rename from 3party/boost/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp rename to 3party/boost/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp index 2fee47009b..a7c4939a36 100644 --- a/3party/boost/boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/pp_deque_keyed_values.hpp @@ -8,7 +8,7 @@ #if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330) #define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330 -#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif @@ -72,6 +72,11 @@ namespace boost { namespace fusion { namespace detail { return type(); } + + static type forward_() + { + return type(); + } }; template diff --git a/3party/boost/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp b/3party/boost/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp similarity index 76% rename from 3party/boost/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp rename to 3party/boost/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp index 43ed5360a2..aae26a5b3c 100644 --- a/3party/boost/boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp +++ b/3party/boost/boost/fusion/container/deque/detail/variadic_deque_keyed_values.hpp @@ -28,13 +28,23 @@ namespace boost { namespace fusion { namespace detail typedef typename deque_keyed_values_impl::type tail; typedef keyed_element type; - static type call( + static type construct( typename detail::call_param::type head , typename detail::call_param::type... tail) { return type( head - , deque_keyed_values_impl::call(tail...) + , deque_keyed_values_impl::construct(tail...) + ); + } + + template + static type forward_(Head_&& head, Tail_&&... tail) + { + return type( + std::forward(head) + , deque_keyed_values_impl:: + forward_(std::forward(tail)...) ); } }; @@ -45,7 +55,8 @@ namespace boost { namespace fusion { namespace detail struct deque_keyed_values_impl { typedef nil_keyed_element type; - static type call() { return type(); } + static type construct() { return type(); } + static type forward_() { return type(); } }; template diff --git a/3party/boost/boost/fusion/container/deque/limits.hpp b/3party/boost/boost/fusion/container/deque/limits.hpp index 2a7d219de6..7892ba1a82 100644 --- a/3party/boost/boost/fusion/container/deque/limits.hpp +++ b/3party/boost/boost/fusion/container/deque/limits.hpp @@ -8,7 +8,7 @@ #if !defined(BOOST_FUSION_DEQUE_LIMITS_26112006_1737) #define BOOST_FUSION_DEQUE_LIMITS_26112006_1737 -#if defined(BOOST_FUSION_HAS_CPP11_DEQUE) +#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE) #error "C++03 only! This file should not have been included" #endif diff --git a/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp b/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp index 92f7aa6c2e..c41d5b297b 100644 --- a/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/vector_forward_ctor.hpp @@ -12,11 +12,14 @@ #include #include +#define FUSION_FORWARD_CTOR_MOVE(z, n, _) std::move(_##n) + #define BOOST_PP_FILENAME_1 \ #define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE) #include BOOST_PP_ITERATE() +#undef FUSION_FORWARD_CTOR_MOVE #endif #else // defined(BOOST_PP_IS_ITERATING) /////////////////////////////////////////////////////////////////////////////// @@ -34,6 +37,14 @@ N, typename detail::call_param::type _)) : vec(BOOST_PP_ENUM_PARAMS(N, _)) {} +#if !defined(BOOST_NO_RVALUE_REFERENCES) +#if N == 1 + explicit +#endif + vector(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _)) + : vec(BOOST_PP_ENUM(N, FUSION_FORWARD_CTOR_MOVE, _)) {} +#endif + #undef N #endif // defined(BOOST_PP_IS_ITERATING) diff --git a/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp b/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp index 4e249c7fe7..539b47fa99 100644 --- a/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp +++ b/3party/boost/boost/fusion/container/vector/detail/vector_n.hpp @@ -9,24 +9,31 @@ #if !defined(FUSION_MACRO_05042005) #define FUSION_MACRO_05042005 -#define FUSION_MEMBER_DEFAULT_INIT(z, n, _) m##n() -#define FUSION_MEMBER_INIT(z, n, _) m##n(_##n) -#define FUSION_COPY_INIT(z, n, _) m##n(other.m##n) -#define FUSION_MEMBER_DECL(z, n, _) T##n m##n; +#define FUSION_VECTOR_MEMBER_MEMBER_DEFAULT_INIT(z, n, _) m##n() +#define FUSION_VECTOR_MEMBER_MEMBER_INIT(z, n, _) m##n(_##n) +#define FUSION_VECTOR_MEMBER_COPY_INIT(z, n, _) m##n(other.m##n) +#define FUSION_VECTOR_MEMBER_FWD(z, n, _) m##n(std::forward(other.m##n)) +#define FUSION_VECTOR_ARG_FWD(z, n, _) m##n(std::forward(_##n)) +#define FUSION_VECTOR_MEMBER_MEMBER_DECL(z, n, _) T##n m##n; +#define FUSION_VECTOR_MEMBER_FORWARD(z, n, _) std::forward(_##n) -#define FUSION_MEMBER_ASSIGN(z, n, _) \ +#define FUSION_VECTOR_MEMBER_MEMBER_ASSIGN(z, n, _) \ this->BOOST_PP_CAT(m, n) = vec.BOOST_PP_CAT(m, n); -#define FUSION_DEREF_MEMBER_ASSIGN(z, n, _) \ +#define FUSION_VECTOR_MEMBER_DEREF_MEMBER_ASSIGN(z, n, _) \ this->BOOST_PP_CAT(m, n) = *BOOST_PP_CAT(i, n); -#define FUSION_AT_IMPL(z, n, _) \ +#define FUSION_VECTOR_MEMBER_MEMBER_FORWARD(z, n, _) \ + this->BOOST_PP_CAT(m, n) = std::forward< \ + BOOST_PP_CAT(T, n)>(vec.BOOST_PP_CAT(m, n)); + +#define FUSION_VECTOR_MEMBER_AT_IMPL(z, n, _) \ typename add_reference::type \ at_impl(mpl::int_) { return this->m##n; } \ typename add_reference::type>::type \ at_impl(mpl::int_) const { return this->m##n; } -#define FUSION_ITER_DECL_VAR(z, n, _) \ +#define FUSION_VECTOR_MEMBER_ITER_DECL_VAR(z, n, _) \ typedef typename result_of::next< \ BOOST_PP_CAT(I, BOOST_PP_DEC(n))>::type BOOST_PP_CAT(I, n); \ BOOST_PP_CAT(I, n) BOOST_PP_CAT(i, n) \ @@ -40,21 +47,32 @@ struct BOOST_PP_CAT(vector_data, N) { BOOST_PP_CAT(vector_data, N)() - : BOOST_PP_ENUM(N, FUSION_MEMBER_DEFAULT_INIT, _) {} + : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_DEFAULT_INIT, _) {} + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _)) + : BOOST_PP_ENUM(N, FUSION_VECTOR_ARG_FWD, _) {} +#endif BOOST_PP_CAT(vector_data, N)( BOOST_PP_ENUM_BINARY_PARAMS( N, typename detail::call_param::type _)) - : BOOST_PP_ENUM(N, FUSION_MEMBER_INIT, _) {} + : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_MEMBER_INIT, _) {} BOOST_PP_CAT(vector_data, N)( BOOST_PP_CAT(vector_data, N) const& other) - : BOOST_PP_ENUM(N, FUSION_COPY_INIT, _) {} + : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_COPY_INIT, _) {} + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + BOOST_PP_CAT(vector_data, N)( + BOOST_PP_CAT(vector_data, N)&& other) + : BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_FWD, _) {} +#endif BOOST_PP_CAT(vector_data, N)& operator=(BOOST_PP_CAT(vector_data, N) const& vec) { - BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _) + BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _) return *this; } @@ -64,7 +82,7 @@ { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); - BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _) + BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _) return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); } @@ -74,11 +92,11 @@ { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); - BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _) + BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _) return BOOST_PP_CAT(vector_data, N)(BOOST_PP_ENUM_PARAMS(N, *i)); } - BOOST_PP_REPEAT(N, FUSION_MEMBER_DECL, _) + BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_DECL, _) }; template @@ -105,6 +123,19 @@ N, typename detail::call_param::type _)) : base_type(BOOST_PP_ENUM_PARAMS(N, _)) {} +#if !defined(BOOST_NO_RVALUE_REFERENCES) +#if (N == 1) + explicit +#endif + BOOST_PP_CAT(vector, N)(BOOST_PP_ENUM_BINARY_PARAMS(N, T, && _)) + : base_type(BOOST_PP_ENUM(N, FUSION_VECTOR_MEMBER_FORWARD, _)) {} +#endif + +#if !defined(BOOST_NO_RVALUE_REFERENCES) + BOOST_PP_CAT(vector, N)(BOOST_PP_CAT(vector, N)&& rhs) + : base_type(std::forward(rhs)) {} +#endif + template BOOST_PP_CAT(vector, N)( BOOST_PP_CAT(vector, N) const& vec) @@ -132,7 +163,7 @@ BOOST_PP_CAT(vector, N)& operator=(BOOST_PP_CAT(vector, N) const& vec) { - BOOST_PP_REPEAT(N, FUSION_MEMBER_ASSIGN, _) + BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_ASSIGN, _) return *this; } @@ -142,12 +173,21 @@ { typedef typename result_of::begin::type I0; I0 i0 = fusion::begin(seq); - BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_ITER_DECL_VAR, _) - BOOST_PP_REPEAT(N, FUSION_DEREF_MEMBER_ASSIGN, _) + BOOST_PP_REPEAT_FROM_TO(1, N, FUSION_VECTOR_MEMBER_ITER_DECL_VAR, _) + BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_DEREF_MEMBER_ASSIGN, _) return *this; } - BOOST_PP_REPEAT(N, FUSION_AT_IMPL, _) +#if !defined(BOOST_NO_RVALUE_REFERENCES) + BOOST_PP_CAT(vector, N)& + operator=(BOOST_PP_CAT(vector, N)&& vec) + { + BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_MEMBER_FORWARD, _) + return *this; + } +#endif + + BOOST_PP_REPEAT(N, FUSION_VECTOR_MEMBER_AT_IMPL, _) template typename add_reference::type>::type @@ -166,3 +206,4 @@ #undef N + diff --git a/3party/boost/boost/fusion/container/vector/vector.hpp b/3party/boost/boost/fusion/container/vector/vector.hpp index 6563bc933b..36c1b7ac9c 100644 --- a/3party/boost/boost/fusion/container/vector/vector.hpp +++ b/3party/boost/boost/fusion/container/vector/vector.hpp @@ -106,6 +106,11 @@ namespace boost { namespace fusion vector(vector const& rhs) : vec(rhs.vec) {} +#if !defined(BOOST_NO_RVALUE_REFERENCES) + vector(vector&& rhs) + : vec(std::forward(rhs.vec)) {} +#endif + template vector(Sequence const& rhs) : vec(BOOST_FUSION_VECTOR_COPY_INIT()) {} @@ -135,6 +140,23 @@ namespace boost { namespace fusion return *this; } +#if !defined(BOOST_NO_RVALUE_REFERENCES) + vector& + operator=(vector&& rhs) + { + vec = std::forward(rhs.vec); + return *this; + } + + template + vector& + operator=(T&& rhs) + { + vec = std::forward(rhs); + return *this; + } +#endif + template typename add_reference< typename mpl::at_c::type diff --git a/3party/boost/boost/fusion/functional/invocation/invoke.hpp b/3party/boost/boost/fusion/functional/invocation/invoke.hpp index 085beb7eda..1a49170277 100644 --- a/3party/boost/boost/fusion/functional/invocation/invoke.hpp +++ b/3party/boost/boost/fusion/functional/invocation/invoke.hpp @@ -57,13 +57,13 @@ namespace boost { namespace fusion template struct invoke; } - template - inline typename result_of::invoke::type - invoke(Function, Sequence &); + //~ template + //~ inline typename result_of::invoke::type + //~ invoke(Function, Sequence &); - template - inline typename result_of::invoke::type - invoke(Function, Sequence const &); + //~ template + //~ inline typename result_of::invoke::type + //~ invoke(Function, Sequence const &); //----- ---- --- -- - - - - @@ -85,6 +85,9 @@ namespace boost { namespace fusion template struct invoke_data_member; + template + struct invoke_fn_ptr; + template struct invoke_mem_fn; @@ -95,10 +98,10 @@ namespace boost { namespace fusion template struct invoke_nonmember_builtin // use same implementation as for function objects but... - : invoke_impl< // ...work around boost::result_of bugs + : invoke_fn_ptr< // ...work around boost::result_of bugs typename mpl::eval_if< ft::is_function, boost::add_reference, boost::remove_cv >::type, - Sequence, N, false, RandomAccess > + Sequence, N, RandomAccess > { }; template @@ -199,6 +202,35 @@ namespace boost { namespace fusion Function(BOOST_PP_ENUM(N,M,~)) >::type result_type; #undef M +#if N > 0 + + template + static inline result_type + call(F & f, Sequence & s) + { +#define M(z,j,data) fusion::at_c(s) + return f( BOOST_PP_ENUM(N,M,~) ); + } + +#else + template + static inline result_type + call(F & f, Sequence & /*s*/) + { + return f(); + } + +#endif + + }; + + template + struct invoke_fn_ptr + { + public: + + typedef typename ft::result_type::type result_type; + #if N > 0 template @@ -278,6 +310,39 @@ namespace boost { namespace fusion return f(); } +#endif + + }; + + template + struct invoke_fn_ptr + { + private: + typedef invoke_param_types seq; + public: + + typedef typename ft::result_type::type result_type; + +#if N > 0 + + template + static inline result_type + call(F & f, Sequence & s) + { + typename seq::I0 i0 = fusion::begin(s); + BOOST_PP_REPEAT_FROM_TO(1,N,M,~) + return f( BOOST_PP_ENUM_PARAMS(N,*i) ); + } + +#else + + template + static inline result_type + call(F & f, Sequence & /*s*/) + { + return f(); + } + #endif }; diff --git a/3party/boost/boost/fusion/iterator/iterator_adapter.hpp b/3party/boost/boost/fusion/iterator/iterator_adapter.hpp index 6805626942..9077f8fa00 100644 --- a/3party/boost/boost/fusion/iterator/iterator_adapter.hpp +++ b/3party/boost/boost/fusion/iterator/iterator_adapter.hpp @@ -23,8 +23,8 @@ namespace boost { namespace fusion iterator_base_type; iterator_base_type iterator_base; - iterator_adapter(iterator_base_type const& iterator_base) - : iterator_base(iterator_base) {} + iterator_adapter(iterator_base_type const& iterator_base_) + : iterator_base(iterator_base_) {} // default implementation template diff --git a/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp b/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp index 1ff05bad06..9e0969a97b 100644 --- a/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp +++ b/3party/boost/boost/fusion/sequence/intrinsic/has_key.hpp @@ -68,7 +68,7 @@ namespace boost { namespace fusion template inline typename result_of::has_key::type - has_key(Sequence const& seq) + has_key(Sequence const&) { typedef typename result_of::has_key::type result; return result(); diff --git a/3party/boost/boost/graph/astar_search.hpp b/3party/boost/boost/graph/astar_search.hpp index 132dca021c..38224a982c 100644 --- a/3party/boost/boost/graph/astar_search.hpp +++ b/3party/boost/boost/graph/astar_search.hpp @@ -370,8 +370,8 @@ namespace boost { detail::make_property_map_from_arg_pack_gen(D())(g, arg_pack), detail::make_property_map_from_arg_pack_gen(D())(g, arg_pack), detail::override_const_property(arg_pack, _weight_map, g, edge_weight), - detail::override_const_property(arg_pack, _vertex_index_map, g, vertex_index), detail::make_color_map_from_arg_pack(g, arg_pack), + detail::override_const_property(arg_pack, _vertex_index_map, g, vertex_index), arg_pack[_distance_compare | std::less()], arg_pack[_distance_combine | closed_plus(inf)], inf, diff --git a/3party/boost/boost/graph/compressed_sparse_row_graph.hpp b/3party/boost/boost/graph/compressed_sparse_row_graph.hpp index 59e8bb4aba..42e2419aa1 100644 --- a/3party/boost/boost/graph/compressed_sparse_row_graph.hpp +++ b/3party/boost/boost/graph/compressed_sparse_row_graph.hpp @@ -136,7 +136,7 @@ namespace detail { typedef boost::iterator_facade, T, std::random_access_iterator_tag, const T&> base_type; T saved_value; const T& dereference() const {return saved_value;} - bool equal(default_construct_iterator i) const {return true;} + bool equal(default_construct_iterator /*i*/) const {return true;} void increment() {} void decrement() {} void advance(typename base_type::difference_type) {} diff --git a/3party/boost/boost/graph/core_numbers.hpp b/3party/boost/boost/graph/core_numbers.hpp index 3db59c72b0..33764c4f40 100644 --- a/3party/boost/boost/graph/core_numbers.hpp +++ b/3party/boost/boost/graph/core_numbers.hpp @@ -11,8 +11,7 @@ #ifndef BOOST_GRAPH_CORE_NUMBERS_HPP #define BOOST_GRAPH_CORE_NUMBERS_HPP -#include -#include +#include #include #include #include @@ -159,7 +158,8 @@ namespace boost { if (get(c,u) > v_cn) { // remove the edge put(c,u,get(c,u)-get(wm,*oi)); - Q.update(u); + if (Q.contains(u)) + Q.update(u); } } vis.finish_vertex(v,g); @@ -175,13 +175,14 @@ namespace boost { { typedef typename property_traits::value_type D; typedef std::less Cmp; - typedef indirect_cmp IndirectCmp; - IndirectCmp icmp(c, Cmp()); // build the mutable queue typedef typename graph_traits::vertex_descriptor vertex; - typedef mutable_queue, IndirectCmp, - IndexMap> MutableQueue; - MutableQueue Q(num_vertices(g), icmp, im); + std::vector index_in_heap_data(num_vertices(g)); + typedef iterator_property_map::iterator, IndexMap> + index_in_heap_map_type; + index_in_heap_map_type index_in_heap_map(index_in_heap_data.begin(), im); + typedef d_ary_heap_indirect MutableQueue; + MutableQueue Q(c, index_in_heap_map, Cmp()); typename graph_traits::vertex_iterator vi,vi_end; for (boost::tie(vi,vi_end) = vertices(g); vi!=vi_end; ++vi) { Q.push(*vi); diff --git a/3party/boost/boost/graph/detail/d_ary_heap.hpp b/3party/boost/boost/graph/detail/d_ary_heap.hpp index ba58647a3d..2d92192660 100644 --- a/3party/boost/boost/graph/detail/d_ary_heap.hpp +++ b/3party/boost/boost/graph/detail/d_ary_heap.hpp @@ -20,6 +20,11 @@ #include #include +// WARNING: it is not safe to copy a d_ary_heap_indirect and then modify one of +// the copies. The class is required to be copyable so it can be passed around +// (without move support from C++11), but it deep-copies the heap contents yet +// shallow-copies the index_in_heap_map. + namespace boost { // Swap two elements in a property map without assuming they model diff --git a/3party/boost/boost/graph/detail/indexed_properties.hpp b/3party/boost/boost/graph/detail/indexed_properties.hpp index e1f874b2cc..4494625c65 100644 --- a/3party/boost/boost/graph/detail/indexed_properties.hpp +++ b/3party/boost/boost/graph/detail/indexed_properties.hpp @@ -253,7 +253,7 @@ class indexed_edge_properties typedef secret const_edge_map_type; secret operator[](secret) { return secret(); } - void write_by_index(std::size_t idx, const no_property& prop) {} + void write_by_index(std::size_t /*idx*/, const no_property& /*prop*/) {} edge_map_type get_edge_bundle(const IndexMap& = IndexMap()) const { return edge_map_type(); @@ -270,7 +270,7 @@ class indexed_edge_properties public: void push_back(const edge_push_back_type&) { } - void move_range(std::size_t src_begin, std::size_t src_end, std::size_t dest_begin) {} + void move_range(std::size_t /*src_begin*/, std::size_t /*src_end*/, std::size_t /*dest_begin*/) {} typedef dummy_no_property_iterator iterator; iterator begin() {return dummy_no_property_iterator();} diff --git a/3party/boost/boost/graph/detail/set_adaptor.hpp b/3party/boost/boost/graph/detail/set_adaptor.hpp index 90a64a2cd4..33acc07e3a 100644 --- a/3party/boost/boost/graph/detail/set_adaptor.hpp +++ b/3party/boost/boost/graph/detail/set_adaptor.hpp @@ -111,7 +111,7 @@ namespace boost { // Shit, can't implement this without knowing the size of the // universe. template - void set_compliment(const std::set& x, + void set_compliment(const std::set& /*x*/, std::set& z) { z.clear(); diff --git a/3party/boost/boost/graph/distributed/adjlist/serialization.hpp b/3party/boost/boost/graph/distributed/adjlist/serialization.hpp index 9325d610cc..d904c5a903 100644 --- a/3party/boost/boost/graph/distributed/adjlist/serialization.hpp +++ b/3party/boost/boost/graph/distributed/adjlist/serialization.hpp @@ -833,12 +833,7 @@ void save_edges(Archive& ar, Graph const& g, DirectedS) typedef typename graph_traits< Graph>::edge_descriptor edge_descriptor; - // We retag the property list here so that bundled properties are - // properly placed into property. - typedef typename boost::detail::retag_property_list< - edge_bundle_t, - typename Graph::edge_property_type>::type - edge_property_type; + typedef typename Graph::edge_property_type edge_property_type; int E = num_edges(g); ar << BOOST_SERIALIZATION_NVP(E); @@ -947,12 +942,6 @@ template template void PBGL_DISTRIB_ADJLIST_TYPE::save(std::string const& filename) const { - // We retag the property list here so that bundled properties are - // properly placed into property. - typedef typename boost::detail::retag_property_list< - vertex_bundle_t, vertex_property_type - >::type vertex_property_type; - typedef typename config_type::VertexListS vertex_list_selector; process_group_type pg = process_group(); diff --git a/3party/boost/boost/graph/filtered_graph.hpp b/3party/boost/boost/graph/filtered_graph.hpp index 66cead609b..74fea46117 100644 --- a/3party/boost/boost/graph/filtered_graph.hpp +++ b/3party/boost/boost/graph/filtered_graph.hpp @@ -195,7 +195,6 @@ namespace boost { typedef filtered_graph_tag graph_tag; -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES // Bundled properties support template typename graph::detail::bundled_result::type& @@ -206,11 +205,10 @@ namespace boost { typename graph::detail::bundled_result::type const& operator[](Descriptor x) const { return this->m_g[x]; } -#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES static vertex_descriptor null_vertex() { - return Graph::null_vertex(); + return Traits::null_vertex(); } //private: @@ -222,26 +220,21 @@ namespace boost { template - struct vertex_property_type > { - typedef typename vertex_property_type::type type; - }; + struct vertex_property_type >: + vertex_property_type {}; template - struct edge_property_type > { - typedef typename edge_property_type::type type; - }; + struct edge_property_type >: + edge_property_type {}; template - struct graph_property_type > { - typedef typename graph_property_type::type type; - }; + struct graph_property_type >: + graph_property_type {}; - -#ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES template struct vertex_bundle_type > @@ -256,7 +249,6 @@ namespace boost { struct graph_bundle_type > : graph_bundle_type { }; -#endif // BOOST_GRAPH_NO_BUNDLED_PROPERTIES //=========================================================================== // Non-member functions for the Filtered Edge Graph diff --git a/3party/boost/boost/graph/grid_graph.hpp b/3party/boost/boost/graph/grid_graph.hpp index 7bb3732422..9a09fca347 100644 --- a/3party/boost/boost/graph/grid_graph.hpp +++ b/3party/boost/boost/graph/grid_graph.hpp @@ -30,11 +30,6 @@ #define BOOST_GRID_GRAPH_TYPE \ grid_graph -#define BOOST_GRID_GRAPH_TYPE_MEM typename BOOST_GRID_GRAPH_TYPE:: - -#define BOOST_GRID_GRAPH_TYPE_TD(mem) \ - typedef typename BOOST_GRID_GRAPH_TYPE::mem mem - #define BOOST_GRID_GRAPH_TRAITS_T \ typename graph_traits @@ -68,6 +63,13 @@ namespace boost { return (m_graph->index_of(key)); } + friend inline Index + get(const grid_graph_index_map& index_map, + const typename grid_graph_index_map::key_type& key) + { + return (index_map[key]); + } + protected: const Graph* m_graph; }; @@ -106,6 +108,13 @@ namespace boost { value_type operator[](const key_type& key) const { return (value_type(key.second, key.first)); } + + friend inline Descriptor + get(const grid_graph_reverse_edge_map& rev_map, + const typename grid_graph_reverse_edge_map::key_type& key) + { + return (rev_map[key]); + } }; template @@ -442,7 +451,7 @@ namespace boost { vertex_descriptor vertex_at (vertices_size_type vertex_index) const { - array vertex; + boost::array vertex; vertices_size_type index_divider = 1; for (std::size_t dimension_index = 0; @@ -532,6 +541,8 @@ namespace boost { vertex_descriptor source_vertex = source(edge, *this); vertex_descriptor target_vertex = target(edge, *this); + BOOST_ASSERT (source_vertex != target_vertex); + // Determine the dimension where the source and target vertices // differ (should only be one if this is a valid edge). std::size_t different_dimension_index = 0; @@ -732,13 +743,12 @@ namespace boost { // VertexListGraph //================ - template - friend inline std::pair - vertices(const BOOST_GRID_GRAPH_TYPE& graph) { - BOOST_GRID_GRAPH_TYPE_TD(vertex_iterator); - BOOST_GRID_GRAPH_TYPE_TD(vertex_function); - BOOST_GRID_GRAPH_TYPE_TD(vertex_index_iterator); + friend inline std::pair + vertices(const type& graph) { + typedef typename type::vertex_iterator vertex_iterator; + typedef typename type::vertex_function vertex_function; + typedef typename type::vertex_index_iterator vertex_index_iterator; return (std::make_pair (vertex_iterator(vertex_index_iterator(0), @@ -747,16 +757,14 @@ namespace boost { vertex_function(&graph)))); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type - num_vertices(const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::vertices_size_type + num_vertices(const type& graph) { return (graph.num_vertices()); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor - vertex(BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type vertex_index, - const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::vertex_descriptor + vertex(typename type::vertices_size_type vertex_index, + const type& graph) { return (graph.vertex_at(vertex_index)); } @@ -765,14 +773,13 @@ namespace boost { // IncidenceGraph //=============== - template - friend inline std::pair - out_edges(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - const BOOST_GRID_GRAPH_TYPE& graph) { - BOOST_GRID_GRAPH_TYPE_TD(degree_iterator); - BOOST_GRID_GRAPH_TYPE_TD(out_edge_function); - BOOST_GRID_GRAPH_TYPE_TD(out_edge_iterator); + friend inline std::pair + out_edges(typename type::vertex_descriptor vertex, + const type& graph) { + typedef typename type::degree_iterator degree_iterator; + typedef typename type::out_edge_function out_edge_function; + typedef typename type::out_edge_iterator out_edge_iterator; return (std::make_pair (out_edge_iterator(degree_iterator(0), @@ -781,19 +788,17 @@ namespace boost { out_edge_function(vertex, &graph)))); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM degree_size_type + friend inline typename type::degree_size_type out_degree - (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - const BOOST_GRID_GRAPH_TYPE& graph) { + (typename type::vertex_descriptor vertex, + const type& graph) { return (graph.out_degree(vertex)); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor - out_edge_at(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - BOOST_GRID_GRAPH_TYPE_MEM degree_size_type out_edge_index, - const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::edge_descriptor + out_edge_at(typename type::vertex_descriptor vertex, + typename type::degree_size_type out_edge_index, + const type& graph) { return (graph.out_edge_at(vertex, out_edge_index)); } @@ -801,14 +806,13 @@ namespace boost { // AdjacencyGraph //=============== - template - friend typename std::pair - adjacent_vertices (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - const BOOST_GRID_GRAPH_TYPE& graph) { - BOOST_GRID_GRAPH_TYPE_TD(degree_iterator); - BOOST_GRID_GRAPH_TYPE_TD(adjacent_vertex_function); - BOOST_GRID_GRAPH_TYPE_TD(adjacency_iterator); + friend typename std::pair + adjacent_vertices (typename type::vertex_descriptor vertex, + const type& graph) { + typedef typename type::degree_iterator degree_iterator; + typedef typename type::adjacent_vertex_function adjacent_vertex_function; + typedef typename type::adjacency_iterator adjacency_iterator; return (std::make_pair (adjacency_iterator(degree_iterator(0), @@ -821,26 +825,23 @@ namespace boost { // EdgeListGraph //============== - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM edges_size_type - num_edges(const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::edges_size_type + num_edges(const type& graph) { return (graph.num_edges()); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor - edge_at(BOOST_GRID_GRAPH_TYPE_MEM edges_size_type edge_index, - const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::edge_descriptor + edge_at(typename type::edges_size_type edge_index, + const type& graph) { return (graph.edge_at(edge_index)); } - template - friend inline std::pair - edges(const BOOST_GRID_GRAPH_TYPE& graph) { - BOOST_GRID_GRAPH_TYPE_TD(edge_index_iterator); - BOOST_GRID_GRAPH_TYPE_TD(edge_function); - BOOST_GRID_GRAPH_TYPE_TD(edge_iterator); + friend inline std::pair + edges(const type& graph) { + typedef typename type::edge_index_iterator edge_index_iterator; + typedef typename type::edge_function edge_function; + typedef typename type::edge_iterator edge_iterator; return (std::make_pair (edge_iterator(edge_index_iterator(0), @@ -853,14 +854,13 @@ namespace boost { // BiDirectionalGraph //=================== - template - friend inline std::pair - in_edges(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - const BOOST_GRID_GRAPH_TYPE& graph) { - BOOST_GRID_GRAPH_TYPE_TD(in_edge_function); - BOOST_GRID_GRAPH_TYPE_TD(degree_iterator); - BOOST_GRID_GRAPH_TYPE_TD(in_edge_iterator); + friend inline std::pair + in_edges(typename type::vertex_descriptor vertex, + const type& graph) { + typedef typename type::in_edge_function in_edge_function; + typedef typename type::degree_iterator degree_iterator; + typedef typename type::in_edge_iterator in_edge_iterator; return (std::make_pair (in_edge_iterator(degree_iterator(0), @@ -869,25 +869,22 @@ namespace boost { in_edge_function(vertex, &graph)))); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM degree_size_type - in_degree (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::degree_size_type + in_degree (typename type::vertex_descriptor vertex, + const type& graph) { return (graph.in_degree(vertex)); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM degree_size_type - degree (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::degree_size_type + degree (typename type::vertex_descriptor vertex, + const type& graph) { return (graph.out_degree(vertex) * 2); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor - in_edge_at(BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex, - BOOST_GRID_GRAPH_TYPE_MEM degree_size_type in_edge_index, - const BOOST_GRID_GRAPH_TYPE& graph) { + friend inline typename type::edge_descriptor + in_edge_at(typename type::vertex_descriptor vertex, + typename type::degree_size_type in_edge_index, + const type& graph) { return (graph.in_edge_at(vertex, in_edge_index)); } @@ -896,21 +893,20 @@ namespace boost { // Adjacency Matrix //================== - template - friend std::pair - edge (BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor source_vertex, - BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor destination_vertex, - const BOOST_GRID_GRAPH_TYPE& graph) { + friend std::pair + edge (typename type::vertex_descriptor source_vertex, + typename type::vertex_descriptor destination_vertex, + const type& graph) { - std::pair edge_exists = + std::pair edge_exists = std::make_pair(std::make_pair(source_vertex, destination_vertex), false); for (std::size_t dimension_index = 0; dimension_index < Dimensions; ++dimension_index) { - BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type dim_difference = 0; - BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type + typename type::vertices_size_type dim_difference = 0; + typename type::vertices_size_type source_dim = source_vertex[dimension_index], dest_dim = destination_vertex[dimension_index]; @@ -957,77 +953,54 @@ namespace boost { // Index Property Map Functions //============================= - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type + friend inline typename type::vertices_size_type get(vertex_index_t, - const BOOST_GRID_GRAPH_TYPE& graph, - BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor vertex) { + const type& graph, + typename type::vertex_descriptor vertex) { return (graph.index_of(vertex)); } - template - friend inline BOOST_GRID_GRAPH_TYPE_MEM edges_size_type + friend inline typename type::edges_size_type get(edge_index_t, - const BOOST_GRID_GRAPH_TYPE& graph, - BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor edge) { + const type& graph, + typename type::edge_descriptor edge) { return (graph.index_of(edge)); } - template friend inline grid_graph_index_map< - BOOST_GRID_GRAPH_TYPE, - BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor, - BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type> - get(vertex_index_t, const BOOST_GRID_GRAPH_TYPE& graph) { + type, + typename type::vertex_descriptor, + typename type::vertices_size_type> + get(vertex_index_t, const type& graph) { return (grid_graph_index_map< - BOOST_GRID_GRAPH_TYPE, - BOOST_GRID_GRAPH_TYPE_MEM vertex_descriptor, - BOOST_GRID_GRAPH_TYPE_MEM vertices_size_type>(graph)); + type, + typename type::vertex_descriptor, + typename type::vertices_size_type>(graph)); } - template friend inline grid_graph_index_map< - BOOST_GRID_GRAPH_TYPE, - BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor, - BOOST_GRID_GRAPH_TYPE_MEM edges_size_type> - get(edge_index_t, const BOOST_GRID_GRAPH_TYPE& graph) { + type, + typename type::edge_descriptor, + typename type::edges_size_type> + get(edge_index_t, const type& graph) { return (grid_graph_index_map< - BOOST_GRID_GRAPH_TYPE, - BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor, - BOOST_GRID_GRAPH_TYPE_MEM edges_size_type>(graph)); + type, + typename type::edge_descriptor, + typename type::edges_size_type>(graph)); } - template friend inline grid_graph_reverse_edge_map< - BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor> - get(edge_reverse_t, const BOOST_GRID_GRAPH_TYPE& graph) { + typename type::edge_descriptor> + get(edge_reverse_t, const type& graph) { return (grid_graph_reverse_edge_map< - BOOST_GRID_GRAPH_TYPE_MEM edge_descriptor>()); + typename type::edge_descriptor>()); } - template - friend inline Index - get(const grid_graph_index_map& index_map, - const typename grid_graph_index_map::key_type& key) - { - return (index_map[key]); - } - template friend struct grid_graph_index_map; - template - friend inline Descriptor - get(const grid_graph_reverse_edge_map& rev_map, - const typename grid_graph_reverse_edge_map::key_type& key) - { - return (rev_map[key]); - } - template friend struct grid_graph_reverse_edge_map; @@ -1036,8 +1009,6 @@ namespace boost { } // namespace boost #undef BOOST_GRID_GRAPH_TYPE -#undef BOOST_GRID_GRAPH_TYPE_TD -#undef BOOST_GRID_GRAPH_TYPE_MEM #undef BOOST_GRID_GRAPH_TEMPLATE_PARAMS #undef BOOST_GRID_GRAPH_TRAITS_T diff --git a/3party/boost/boost/graph/is_kuratowski_subgraph.hpp b/3party/boost/boost/graph/is_kuratowski_subgraph.hpp index 1dd314d317..d0a2aede97 100644 --- a/3party/boost/boost/graph/is_kuratowski_subgraph.hpp +++ b/3party/boost/boost/graph/is_kuratowski_subgraph.hpp @@ -175,7 +175,7 @@ namespace boost while (neighbors[v].size() > 0 && neighbors[v].size() < max_size) { - // Find one of v's neighbors u such that that v and u + // Find one of v's neighbors u such that v and u // have no neighbors in common. We'll look for such a // neighbor with a naive cubic-time algorithm since the // max size of any of the neighbor sets we'll consider diff --git a/3party/boost/boost/graph/labeled_graph.hpp b/3party/boost/boost/graph/labeled_graph.hpp index e1a2f7c2d7..67505d2509 100644 --- a/3party/boost/boost/graph/labeled_graph.hpp +++ b/3party/boost/boost/graph/labeled_graph.hpp @@ -196,7 +196,7 @@ namespace graph_detail { { // If the element is already occupied, then we probably don't want to // overwrite it. - if(c[l] == Graph::null_vertex()) return false; + if(c[l] == graph_traits::null_vertex()) return false; c[l] = v; return true; } @@ -411,7 +411,7 @@ public: /** Return a null descriptor */ static vertex_descriptor null_vertex() - { return graph_type::null_vertex(); } + { return graph_traits::null_vertex(); } private: graph_type _graph; @@ -525,7 +525,7 @@ public: #endif static vertex_descriptor null_vertex() - { return graph_type::null_vertex(); } + { return graph_traits::null_vertex(); } private: graph_type* _graph; diff --git a/3party/boost/boost/graph/named_function_params.hpp b/3party/boost/boost/graph/named_function_params.hpp index 32dd580232..3dd1a1367d 100644 --- a/3party/boost/boost/graph/named_function_params.hpp +++ b/3party/boost/boost/graph/named_function_params.hpp @@ -278,13 +278,13 @@ BOOST_BGL_DECLARE_NAMED_PARAMS template <> struct choose_impl_helper { template - static typename property_map::const_type + static typename property_map::type, PropertyTag>::const_type f(boost::mpl::true_, const Graph& g, const Param&, PropertyTag tag) { return get(tag, g); } template - static typename property_map::type + static typename property_map::type, PropertyTag>::type f(boost::mpl::false_, Graph& g, const Param&, PropertyTag tag) { return get(tag, g); } @@ -432,13 +432,13 @@ BOOST_BGL_DECLARE_NAMED_PARAMS template struct override_property_t { typedef ArgType result_type; - result_type operator()(const Graph& g, const typename boost::add_reference::type a) const {return a;} + result_type operator()(const Graph&, const typename boost::add_reference::type a) const {return a;} }; template struct override_property_t { typedef typename boost::property_map::type result_type; - result_type operator()(const Graph& g, const ArgType& a) const {return get(Prop(), g);} + result_type operator()(const Graph& g, const ArgType&) const {return get(Prop(), g);} }; template @@ -455,7 +455,7 @@ BOOST_BGL_DECLARE_NAMED_PARAMS template typename override_property_result::type - override_property(const ArgPack& ap, const boost::parameter::keyword& t, const Graph& g, Prop prop) { + override_property(const ArgPack& ap, const boost::parameter::keyword& t, const Graph& g, Prop) { return override_property_t< typename boost::parameter::value_type::type, Prop, @@ -633,7 +633,7 @@ BOOST_BGL_DECLARE_NAMED_PARAMS typedef Q priority_queue_type; static priority_queue_type - make_queue(const Graph& g, const ArgPack& ap, KeyT defaultKey, const Q& q) { + make_queue(const Graph&, const ArgPack&, KeyT, const Q& q) { return q; } }; @@ -645,7 +645,7 @@ BOOST_BGL_DECLARE_NAMED_PARAMS typedef boost::d_ary_heap_indirect::helper::map_type, Compare> priority_queue_type; static priority_queue_type - make_queue(const Graph& g, const ArgPack& ap, KeyT defaultKey, const Q& q) { + make_queue(const Graph& g, const ArgPack& ap, KeyT defaultKey, const Q&) { return priority_queue_type( map_maker::make_map(g, ap, defaultKey), map_maker::make_map(g, ap, typename boost::property_traits::value_type(-1)) diff --git a/3party/boost/boost/graph/named_graph.hpp b/3party/boost/boost/graph/named_graph.hpp index f49c09707d..77e1a22f6b 100644 --- a/3party/boost/boost/graph/named_graph.hpp +++ b/3party/boost/boost/graph/named_graph.hpp @@ -105,7 +105,7 @@ public: typedef vertex_name_type argument_type; typedef VertexProperty result_type; - VertexProperty operator()(const vertex_name_type& name) + VertexProperty operator()(const vertex_name_type&) { boost::throw_exception(std::runtime_error("add_vertex: " "unable to create a vertex from its name")); diff --git a/3party/boost/boost/graph/properties.hpp b/3party/boost/boost/graph/properties.hpp index 6b5ade974a..5cc926bc0b 100644 --- a/3party/boost/boost/graph/properties.hpp +++ b/3party/boost/boost/graph/properties.hpp @@ -21,7 +21,7 @@ #include #include -#include +#include #include #include #include @@ -149,13 +149,13 @@ namespace boost { template struct property_kind_from_graph { typedef typename boost::mpl::if_< - boost::is_same::type>, + boost::is_base_of::type>, vertex_property_tag, typename boost::mpl::if_< - boost::is_same::type>, + boost::is_base_of::type>, edge_property_tag, typename boost::mpl::if_< - boost::is_same::type>, + boost::is_base_of::type>, graph_property_tag, void>::type>::type>::type type; }; diff --git a/3party/boost/boost/graph/relax.hpp b/3party/boost/boost/graph/relax.hpp index 4685796096..e3866df484 100644 --- a/3party/boost/boost/graph/relax.hpp +++ b/3party/boost/boost/graph/relax.hpp @@ -49,20 +49,30 @@ namespace boost { Vertex u = source(e, g), v = target(e, g); typedef typename property_traits::value_type D; typedef typename property_traits::value_type W; - D d_u = get(d, u), d_v = get(d, v); - W w_e = get(w, e); + const D d_u = get(d, u); + const D d_v = get(d, v); + const W& w_e = get(w, e); - // The redundant gets in the return statements are to ensure that extra - // floating-point precision in x87 registers does not lead to relax() - // returning true when the distance did not actually change. + // The seemingly redundant comparisons after the distance puts are to + // ensure that extra floating-point precision in x87 registers does not + // lead to relax() returning true when the distance did not actually + // change. if ( compare(combine(d_u, w_e), d_v) ) { put(d, v, combine(d_u, w_e)); - put(p, v, u); - return compare(get(d, v), d_v); + if (compare(get(d, v), d_v)) { + put(p, v, u); + return true; + } else { + return false; + } } else if (is_undirected && compare(combine(d_v, w_e), d_u)) { put(d, u, combine(d_v, w_e)); - put(p, u, v); - return compare(get(d, u), d_u); + if (compare(get(d, u), d_u)) { + put(p, u, v); + return true; + } else { + return false; + } } else return false; } diff --git a/3party/boost/boost/graph/reverse_graph.hpp b/3party/boost/boost/graph/reverse_graph.hpp index 96fc32d3ae..bea975ab98 100644 --- a/3party/boost/boost/graph/reverse_graph.hpp +++ b/3party/boost/boost/graph/reverse_graph.hpp @@ -460,7 +460,7 @@ template typename enable_if, detail::underlying_edge_desc_map_type::edge_descriptor> >::type get(edge_underlying_t, - G& g) + G&) { return detail::underlying_edge_desc_map_type::edge_descriptor>(); } @@ -468,7 +468,7 @@ get(edge_underlying_t, template typename enable_if, typename graph_traits::edge_descriptor>::type get(edge_underlying_t, - G& g, + G&, const typename graph_traits::edge_descriptor& k) { return k.underlying_descx; @@ -477,7 +477,7 @@ get(edge_underlying_t, template typename enable_if, detail::underlying_edge_desc_map_type::edge_descriptor> >::type get(edge_underlying_t, - const G& g) + const G&) { return detail::underlying_edge_desc_map_type::edge_descriptor>(); } @@ -485,7 +485,7 @@ get(edge_underlying_t, template typename enable_if, typename graph_traits::edge_descriptor>::type get(edge_underlying_t, - const G& g, + const G&, const typename graph_traits::edge_descriptor& k) { return k.underlying_descx; diff --git a/3party/boost/boost/graph/undirected_graph.hpp b/3party/boost/boost/graph/undirected_graph.hpp index adcc86e515..738a5c9504 100644 --- a/3party/boost/boost/graph/undirected_graph.hpp +++ b/3party/boost/boost/graph/undirected_graph.hpp @@ -10,11 +10,6 @@ #include #include -// NOTE: The retag_property_list is used to "normalize" a proeprty such that -// any non-property conforming parameter is wrapped in a vertex_bundle -// property. For example (with bad syntax) retag> -> property, -// but retag -> property. - namespace boost { struct undirected_graph_tag { }; diff --git a/3party/boost/boost/graph/visitors.hpp b/3party/boost/boost/graph/visitors.hpp index f986c96ce4..d10e140c7c 100644 --- a/3party/boost/boost/graph/visitors.hpp +++ b/3party/boost/boost/graph/visitors.hpp @@ -269,7 +269,7 @@ namespace boost { {} template - void operator() (VertexOrEdge v, const Graph& g) + void operator() (VertexOrEdge v, const Graph&) { put (property_map_, v, value_); } @@ -292,7 +292,7 @@ namespace boost { inline property_put put_property (PropertyMap property_map, typename property_traits ::value_type value, - EventTag tag) + EventTag) { return property_put (property_map, value); } diff --git a/3party/boost/boost/icl/concept/element_associator.hpp b/3party/boost/boost/icl/concept/element_associator.hpp index a9371848d1..ce421e018c 100644 --- a/3party/boost/boost/icl/concept/element_associator.hpp +++ b/3party/boost/boost/icl/concept/element_associator.hpp @@ -188,7 +188,7 @@ operator + (const typename Type::value_type& operand, Type object) } template -inline typename enable_if, Type>::type +inline typename enable_if, Type>::type& operator += (Type& object, const Type& operand) { if(&object == &operand) diff --git a/3party/boost/boost/integer_traits.hpp b/3party/boost/boost/integer_traits.hpp index e504cd12e3..98fdd93be7 100644 --- a/3party/boost/boost/integer_traits.hpp +++ b/3party/boost/boost/integer_traits.hpp @@ -5,7 +5,7 @@ * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * - * $Id: integer_traits.hpp 79771 2012-07-27 18:15:55Z jewillco $ + * $Id: integer_traits.hpp 80740 2012-09-28 18:34:12Z jewillco $ * * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers */ diff --git a/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp index a85202b4ee..d506af23a5 100644 --- a/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/adaptive_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -105,7 +105,7 @@ class adaptive_pool_base //!adaptive_pool_base template struct rebind - { + { typedef adaptive_pool_base other; }; @@ -129,8 +129,8 @@ class adaptive_pool_base //!count of the associated node pool. Never throws adaptive_pool_base(const adaptive_pool_base &other) : mp_node_pool(other.get_node_pool()) - { - node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->inc_ref_count(); + { + node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->inc_ref_count(); } //!Assignment from other adaptive_pool_base @@ -211,7 +211,7 @@ class adaptive_pool_v1 template struct rebind - { + { typedef adaptive_pool_v1 other; }; @@ -271,7 +271,7 @@ class adaptive_pool template struct rebind - { + { typedef adaptive_pool other; }; @@ -303,7 +303,7 @@ class adaptive_pool //!adaptive_pool template struct rebind - { + { typedef adaptive_pool other; }; diff --git a/3party/boost/boost/interprocess/allocators/allocator.hpp b/3party/boost/boost/interprocess/allocators/allocator.hpp index 38e8c6901a..a695eac28c 100644 --- a/3party/boost/boost/interprocess/allocators/allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/allocator.hpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -115,7 +115,7 @@ class allocator //!objects of type T2 template struct rebind - { + { typedef allocator other; }; @@ -145,8 +145,9 @@ class allocator pointer allocate(size_type count, cvoid_ptr hint = 0) { (void)hint; - if(count > this->max_size()) + if(size_overflows(count)){ throw bad_alloc(); + } return pointer(static_cast(mp_mngr->allocate(count*sizeof(T)))); } @@ -169,7 +170,7 @@ class allocator //!pointed by p can hold. This size only works for memory allocated with //!allocate, allocation_command and allocate_many. size_type size(const pointer &p) const - { + { return (size_type)mp_mngr->size(ipcdetail::to_raw_pointer(p))/sizeof(T); } @@ -192,7 +193,10 @@ class allocator multiallocation_chain allocate_many (size_type elem_size, size_type num_elements) { - return multiallocation_chain(mp_mngr->allocate_many(sizeof(T)*elem_size, num_elements)); + if(size_overflows(elem_size)){ + throw bad_alloc(); + } + return multiallocation_chain(mp_mngr->allocate_many(elem_size*sizeof(T), num_elements)); } //!Allocates n_elements elements, each one of size elem_sizes[i]in a diff --git a/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp index 98af033fe6..6de24c4911 100644 --- a/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/cached_adaptive_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -69,7 +69,7 @@ class cached_adaptive_pool_v1 template struct rebind - { + { typedef cached_adaptive_pool_v1 other; }; @@ -149,7 +149,7 @@ class cached_adaptive_pool template struct rebind - { + { typedef cached_adaptive_pool other; }; @@ -183,7 +183,7 @@ class cached_adaptive_pool //!cached_adaptive_pool template struct rebind - { + { typedef cached_adaptive_pool other; }; diff --git a/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp b/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp index b0ad0e4ebc..3cef9972de 100644 --- a/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/cached_node_allocator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -64,7 +64,7 @@ class cached_node_allocator_v1 template struct rebind - { + { typedef cached_node_allocator_v1 other; }; @@ -122,7 +122,7 @@ class cached_node_allocator template struct rebind - { + { typedef cached_node_allocator other; }; @@ -155,7 +155,7 @@ class cached_node_allocator //!cached_node_allocator template struct rebind - { + { typedef cached_node_allocator other; }; diff --git a/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp b/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp index abe183146f..0dfba0a3e4 100644 --- a/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/adaptive_node_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -74,7 +74,7 @@ class private_adaptive_node_pool }; //!Pooled shared memory allocator using adaptive pool. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template< class SegmentManager diff --git a/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp b/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp index ba14d3f64d..597da9d6ec 100644 --- a/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/allocator_common.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // @@ -73,7 +73,7 @@ namespace ipcdetail { template struct get_or_create_node_pool_func { - + //!This connects or constructs the unique instance of node_pool_t //!Can throw boost::interprocess::bad_alloc void operator()() @@ -90,7 +90,7 @@ struct get_or_create_node_pool_func //!object parameters get_or_create_node_pool_func(typename NodePool::segment_manager *mngr) : mp_segment_manager(mngr){} - + NodePool *mp_node_pool; typename NodePool::segment_manager *mp_segment_manager; }; @@ -118,7 +118,7 @@ struct destroy_if_last_link_func //Last link, let's destroy the segment_manager mp_node_pool->get_segment_manager()->template destroy(boost::interprocess::unique_instance); - } + } //!Constructor. Initializes function //!object parameters @@ -173,7 +173,7 @@ class cache_impl ~cache_impl() { this->deallocate_all_cached_nodes(); - ipcdetail::destroy_node_pool_if_last_link(ipcdetail::to_raw_pointer(mp_node_pool)); + ipcdetail::destroy_node_pool_if_last_link(ipcdetail::to_raw_pointer(mp_node_pool)); } NodePool *get_node_pool() const @@ -191,8 +191,7 @@ class cache_impl if(m_cached_nodes.empty()){ m_cached_nodes = mp_node_pool->allocate_nodes(m_max_cached_nodes/2); } - void *ret = ipcdetail::to_raw_pointer(m_cached_nodes.front()); - m_cached_nodes.pop_front(); + void *ret = ipcdetail::to_raw_pointer(m_cached_nodes.pop_front()); return ret; } @@ -203,8 +202,7 @@ class cache_impl BOOST_TRY{ //If don't have any cached node, we have to get a new list of free nodes from the pool while(!m_cached_nodes.empty() && count--){ - void *ret = ipcdetail::to_raw_pointer(m_cached_nodes.front()); - m_cached_nodes.pop_front(); + void *ret = ipcdetail::to_raw_pointer(m_cached_nodes.pop_front()); chain.push_back(ret); ++allocated; } @@ -335,7 +333,7 @@ class array_allocation_impl //!pointed by p can hold. This size only works for memory allocated with //!allocate, allocation_command and allocate_many. size_type size(const pointer &p) const - { + { return (size_type)this->derived()->get_segment_manager()->size(ipcdetail::to_raw_pointer(p))/sizeof(T); } @@ -357,7 +355,10 @@ class array_allocation_impl //!with deallocate(...) multiallocation_chain allocate_many(size_type elem_size, size_type num_elements) { - return this->derived()->get_segment_manager()->allocate_many(sizeof(T)*elem_size, num_elements); + if(size_overflows(elem_size)){ + throw bad_alloc(); + } + return this->derived()->get_segment_manager()->allocate_many(elem_size*sizeof(T), num_elements); } //!Allocates n_elements elements, each one of size elem_sizes[i]in a @@ -457,14 +458,17 @@ class node_pool_allocation_impl (void)hint; typedef typename node_pool<0>::type node_pool_t; node_pool_t *pool = node_pool<0>::get(this->derived()->get_node_pool()); - if(count > this->max_size()) + if(size_overflows(count)){ throw bad_alloc(); - else if(Version == 1 && count == 1) + } + else if(Version == 1 && count == 1){ return pointer(static_cast (pool->allocate_node())); - else + } + else{ return pointer(static_cast - (pool->get_segment_manager()->allocate(sizeof(T)*count))); + (pool->get_segment_manager()->allocate(count*sizeof(T)))); + } } //!Deallocate allocated memory. Never throws @@ -605,14 +609,15 @@ class cached_allocator_impl { (void)hint; void * ret; - if(count > this->max_size()) + if(size_overflows(count)){ throw bad_alloc(); + } else if(Version == 1 && count == 1){ ret = m_cache.cached_allocation(); } else{ - ret = this->get_segment_manager()->allocate(sizeof(T)*count); - } + ret = this->get_segment_manager()->allocate(count*sizeof(T)); + } return pointer(static_cast(ret)); } @@ -699,7 +704,7 @@ bool operator!=(const cached_allocator_impl &alloc1, //!Pooled shared memory allocator using adaptive pool. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template @@ -736,7 +741,7 @@ class shared_pool_impl //----------------------- return private_node_allocator_t::allocate_node(); } - + //!Deallocates an array pointed by ptr. Never throws void deallocate_node(void *ptr) { diff --git a/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp b/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp index 562b64863b..e67d3217b5 100644 --- a/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/node_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -37,7 +37,7 @@ namespace ipcdetail { //!Pooled shared memory allocator using single segregated storage. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template< class SegmentManager, std::size_t NodeSize, std::size_t NodesPerBlock > @@ -73,11 +73,11 @@ class private_node_pool //!Pooled shared memory allocator using single segregated storage. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time //!Pooled shared memory allocator using adaptive pool. Includes -//!a reference count but the class does not delete itself, this is +//!a reference count but the class does not delete itself, this is //!responsibility of user classes. Node size (NodeSize) and the number of //!nodes allocated per block (NodesPerBlock) are known at compile time template< class SegmentManager diff --git a/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp b/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp index da7e4668e8..e9fec385e3 100644 --- a/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp +++ b/3party/boost/boost/interprocess/allocators/detail/node_tools.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-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) // diff --git a/3party/boost/boost/interprocess/allocators/node_allocator.hpp b/3party/boost/boost/interprocess/allocators/node_allocator.hpp index 2c1fe566a3..1f9203dc2a 100644 --- a/3party/boost/boost/interprocess/allocators/node_allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/node_allocator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -102,7 +102,7 @@ class node_allocator_base //!node_allocator_base template struct rebind - { + { typedef node_allocator_base other; }; @@ -128,8 +128,8 @@ class node_allocator_base //!count of the associated node pool. Never throws node_allocator_base(const node_allocator_base &other) : mp_node_pool(other.get_node_pool()) - { - node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->inc_ref_count(); + { + node_pool<0>::get(ipcdetail::to_raw_pointer(mp_node_pool))->inc_ref_count(); } //!Copy constructor from related node_allocator_base. If not present, constructs @@ -206,7 +206,7 @@ class node_allocator_v1 template struct rebind - { + { typedef node_allocator_v1 other; }; @@ -256,7 +256,7 @@ class node_allocator template struct rebind - { + { typedef node_allocator other; }; @@ -288,7 +288,7 @@ class node_allocator //!node_allocator template struct rebind - { + { typedef node_allocator other; }; diff --git a/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp b/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp index febe85c69d..9a466e4bc6 100644 --- a/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp +++ b/3party/boost/boost/interprocess/allocators/private_adaptive_pool.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -102,7 +102,7 @@ class private_adaptive_pool_base //!Obtains node_allocator from other node_allocator template struct rebind - { + { typedef private_adaptive_pool_base other; }; @@ -210,7 +210,7 @@ class private_adaptive_pool_v1 template struct rebind - { + { typedef private_adaptive_pool_v1 other; }; @@ -269,7 +269,7 @@ class private_adaptive_pool template struct rebind - { + { typedef private_adaptive_pool other; }; @@ -302,7 +302,7 @@ class private_adaptive_pool //!private_adaptive_pool template struct rebind - { + { typedef private_adaptive_pool other; }; diff --git a/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp b/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp index 46b7dd6097..798258db6d 100644 --- a/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp +++ b/3party/boost/boost/interprocess/allocators/private_node_allocator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -97,7 +97,7 @@ class private_node_allocator_base //!Obtains node_allocator from other node_allocator template struct rebind - { + { typedef private_node_allocator_base other; }; @@ -198,7 +198,7 @@ class private_node_allocator_v1 template struct rebind - { + { typedef private_node_allocator_v1 other; }; @@ -246,7 +246,7 @@ class private_node_allocator template struct rebind - { + { typedef private_node_allocator other; }; @@ -279,7 +279,7 @@ class private_node_allocator //!private_node_allocator template struct rebind - { + { typedef private_node_allocator other; }; diff --git a/3party/boost/boost/interprocess/anonymous_shared_memory.hpp b/3party/boost/boost/interprocess/anonymous_shared_memory.hpp index 624f57f9c3..2eb219a839 100644 --- a/3party/boost/boost/interprocess/anonymous_shared_memory.hpp +++ b/3party/boost/boost/interprocess/anonymous_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -90,13 +90,13 @@ anonymous_shared_memory(std::size_t size, void *address = 0) , 0); if(address == MAP_FAILED){ - if(fd != -1) + if(fd != -1) close(fd); error_info err = system_error_code(); throw interprocess_exception(err); } - if(fd != -1) + if(fd != -1) close(fd); return ipcdetail::raw_mapped_region_creator::create_posix_mapped_region(address, size); diff --git a/3party/boost/boost/interprocess/containers/allocation_type.hpp b/3party/boost/boost/interprocess/containers/allocation_type.hpp index 660b6cbdbc..eea431b0d9 100644 --- a/3party/boost/boost/interprocess/containers/allocation_type.hpp +++ b/3party/boost/boost/interprocess/containers/allocation_type.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/containers_fwd.hpp b/3party/boost/boost/interprocess/containers/containers_fwd.hpp index 7852bbc853..28cd0f126d 100644 --- a/3party/boost/boost/interprocess/containers/containers_fwd.hpp +++ b/3party/boost/boost/interprocess/containers/containers_fwd.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // diff --git a/3party/boost/boost/interprocess/containers/deque.hpp b/3party/boost/boost/interprocess/containers/deque.hpp index 30ca43203f..66122e2479 100644 --- a/3party/boost/boost/interprocess/containers/deque.hpp +++ b/3party/boost/boost/interprocess/containers/deque.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/flat_map.hpp b/3party/boost/boost/interprocess/containers/flat_map.hpp index f18a006c79..38b04ac9ac 100644 --- a/3party/boost/boost/interprocess/containers/flat_map.hpp +++ b/3party/boost/boost/interprocess/containers/flat_map.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/flat_set.hpp b/3party/boost/boost/interprocess/containers/flat_set.hpp index 1b2bf9b4d3..45b42fd1ee 100644 --- a/3party/boost/boost/interprocess/containers/flat_set.hpp +++ b/3party/boost/boost/interprocess/containers/flat_set.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/list.hpp b/3party/boost/boost/interprocess/containers/list.hpp index a75b9759b3..50f0ff0d04 100644 --- a/3party/boost/boost/interprocess/containers/list.hpp +++ b/3party/boost/boost/interprocess/containers/list.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/map.hpp b/3party/boost/boost/interprocess/containers/map.hpp index 2e45ec0630..ca00b2049c 100644 --- a/3party/boost/boost/interprocess/containers/map.hpp +++ b/3party/boost/boost/interprocess/containers/map.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/pair.hpp b/3party/boost/boost/interprocess/containers/pair.hpp index 8ba6d047ac..65526ab934 100644 --- a/3party/boost/boost/interprocess/containers/pair.hpp +++ b/3party/boost/boost/interprocess/containers/pair.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/set.hpp b/3party/boost/boost/interprocess/containers/set.hpp index db06afea6d..6979204530 100644 --- a/3party/boost/boost/interprocess/containers/set.hpp +++ b/3party/boost/boost/interprocess/containers/set.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/slist.hpp b/3party/boost/boost/interprocess/containers/slist.hpp index f93379cb7a..b511d060ff 100644 --- a/3party/boost/boost/interprocess/containers/slist.hpp +++ b/3party/boost/boost/interprocess/containers/slist.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/stable_vector.hpp b/3party/boost/boost/interprocess/containers/stable_vector.hpp index ae09e6b52f..4a59b81edc 100644 --- a/3party/boost/boost/interprocess/containers/stable_vector.hpp +++ b/3party/boost/boost/interprocess/containers/stable_vector.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/string.hpp b/3party/boost/boost/interprocess/containers/string.hpp index a11bb904b4..e7af2fa36a 100644 --- a/3party/boost/boost/interprocess/containers/string.hpp +++ b/3party/boost/boost/interprocess/containers/string.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/vector.hpp b/3party/boost/boost/interprocess/containers/vector.hpp index 3a6b411512..3f10e01534 100644 --- a/3party/boost/boost/interprocess/containers/vector.hpp +++ b/3party/boost/boost/interprocess/containers/vector.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/containers/version_type.hpp b/3party/boost/boost/interprocess/containers/version_type.hpp index 247f800f4a..4516e8c9b5 100644 --- a/3party/boost/boost/interprocess/containers/version_type.hpp +++ b/3party/boost/boost/interprocess/containers/version_type.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/creation_tags.hpp b/3party/boost/boost/interprocess/creation_tags.hpp index 374829ac2b..459eb4df47 100644 --- a/3party/boost/boost/interprocess/creation_tags.hpp +++ b/3party/boost/boost/interprocess/creation_tags.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/detail/atomic.hpp b/3party/boost/boost/interprocess/detail/atomic.hpp index aab1533985..08481a4308 100644 --- a/3party/boost/boost/interprocess/detail/atomic.hpp +++ b/3party/boost/boost/interprocess/detail/atomic.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006-2011 +// (C) Copyright Ion Gaztanaga 2006-2012 // (C) Copyright Markus Schoepflin 2007 // (C) Copyright Bryce Lelbach 2010 // @@ -390,96 +390,96 @@ inline boost::uint32_t atomic_cas32( } //namespace interprocess{ } //namespace boost{ -#elif defined(__IBMCPP__) && (__IBMCPP__ >= 800) && defined(_AIX) +#elif defined(__IBMCPP__) && (__IBMCPP__ >= 800) && defined(_AIX) -#include +#include -namespace boost { -namespace interprocess { -namespace ipcdetail{ +namespace boost { +namespace interprocess { +namespace ipcdetail{ -//first define boost::uint32_t versions of __lwarx and __stwcx to avoid poluting -//all the functions with casts +//first define boost::uint32_t versions of __lwarx and __stwcx to avoid poluting +//all the functions with casts -//! From XLC documenation : -//! This function can be used with a subsequent stwcxu call to implement a -//! read-modify-write on a specified memory location. The two functions work -//! together to ensure that if the store is successfully performed, no other -//! processor or mechanism can modify the target doubleword between the time -//! lwarxu function is executed and the time the stwcxu functio ncompletes. -//! "mem" : pointer to the object -//! Returns the value at pointed to by mem -inline boost::uint32_t lwarxu(volatile boost::uint32_t *mem) -{ - return static_cast(__lwarx(reinterpret_cast(mem))); -} +//! From XLC documenation : +//! This function can be used with a subsequent stwcxu call to implement a +//! read-modify-write on a specified memory location. The two functions work +//! together to ensure that if the store is successfully performed, no other +//! processor or mechanism can modify the target doubleword between the time +//! lwarxu function is executed and the time the stwcxu functio ncompletes. +//! "mem" : pointer to the object +//! Returns the value at pointed to by mem +inline boost::uint32_t lwarxu(volatile boost::uint32_t *mem) +{ + return static_cast(__lwarx(reinterpret_cast(mem))); +} -//! "mem" : pointer to the object -//! "val" : the value to store -//! Returns true if the update of mem is successful and false if it is -//!unsuccessful -inline bool stwcxu(volatile boost::uint32_t* mem, boost::uint32_t val) -{ - return (__stwcx(reinterpret_cast(mem), static_cast(val)) != 0); -} +//! "mem" : pointer to the object +//! "val" : the value to store +//! Returns true if the update of mem is successful and false if it is +//!unsuccessful +inline bool stwcxu(volatile boost::uint32_t* mem, boost::uint32_t val) +{ + return (__stwcx(reinterpret_cast(mem), static_cast(val)) != 0); +} -//! "mem": pointer to the object -//! "val": amount to add -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_add32 - (volatile boost::uint32_t *mem, boost::uint32_t val) -{ - boost::uint32_t oldValue; - do - { - oldValue = lwarxu(mem); - }while (!stwcxu(mem, oldValue+val)); - return oldValue; -} +//! "mem": pointer to the object +//! "val": amount to add +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_add32 + (volatile boost::uint32_t *mem, boost::uint32_t val) +{ + boost::uint32_t oldValue; + do + { + oldValue = lwarxu(mem); + }while (!stwcxu(mem, oldValue+val)); + return oldValue; +} -//! Atomically increment an apr_uint32_t by 1 -//! "mem": pointer to the object -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) -{ return atomic_add32(mem, 1); } +//! Atomically increment an apr_uint32_t by 1 +//! "mem": pointer to the object +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_inc32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, 1); } -//! Atomically decrement an boost::uint32_t by 1 -//! "mem": pointer to the atomic value -//! Returns the old value pointed to by mem -inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) -{ return atomic_add32(mem, (boost::uint32_t)-1); } +//! Atomically decrement an boost::uint32_t by 1 +//! "mem": pointer to the atomic value +//! Returns the old value pointed to by mem +inline boost::uint32_t atomic_dec32(volatile boost::uint32_t *mem) +{ return atomic_add32(mem, (boost::uint32_t)-1); } -//! Atomically read an boost::uint32_t from memory -inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) -{ return *mem; } +//! Atomically read an boost::uint32_t from memory +inline boost::uint32_t atomic_read32(volatile boost::uint32_t *mem) +{ return *mem; } -//! Compare an boost::uint32_t's value with "cmp". -//! If they are the same swap the value with "with" -//! "mem": pointer to the value -//! "with" what to swap it with -//! "cmp": the value to compare it to -//! Returns the old value of *mem -inline boost::uint32_t atomic_cas32 - (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) -{ - boost::uint32_t oldValue; - boost::uint32_t valueToStore; - do - { - oldValue = lwarxu(mem); - } while (!stwcxu(mem, (oldValue == with) ? cmp : oldValue)); +//! Compare an boost::uint32_t's value with "cmp". +//! If they are the same swap the value with "with" +//! "mem": pointer to the value +//! "with" what to swap it with +//! "cmp": the value to compare it to +//! Returns the old value of *mem +inline boost::uint32_t atomic_cas32 + (volatile boost::uint32_t *mem, boost::uint32_t with, boost::uint32_t cmp) +{ + boost::uint32_t oldValue; + boost::uint32_t valueToStore; + do + { + oldValue = lwarxu(mem); + } while (!stwcxu(mem, (oldValue == with) ? cmp : oldValue)); - return oldValue; -} + return oldValue; +} -//! Atomically set an boost::uint32_t in memory -//! "mem": pointer to the object -//! "param": val value that the object will assume -inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) -{ *mem = val; } +//! Atomically set an boost::uint32_t in memory +//! "mem": pointer to the object +//! "param": val value that the object will assume +inline void atomic_write32(volatile boost::uint32_t *mem, boost::uint32_t val) +{ *mem = val; } -} //namespace ipcdetail -} //namespace interprocess +} //namespace ipcdetail +} //namespace interprocess } //namespace boost #elif defined(__GNUC__) && ( __GNUC__ * 100 + __GNUC_MINOR__ >= 401 ) @@ -552,9 +552,9 @@ inline bool atomic_add_unless32 return c != unless_this; } -} //namespace ipcdetail -} //namespace interprocess -} //namespace boost +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost #include diff --git a/3party/boost/boost/interprocess/detail/cast_tags.hpp b/3party/boost/boost/interprocess/detail/cast_tags.hpp index bd91d1b6bb..37dabd1f8a 100644 --- a/3party/boost/boost/interprocess/detail/cast_tags.hpp +++ b/3party/boost/boost/interprocess/detail/cast_tags.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/detail/config_begin.hpp b/3party/boost/boost/interprocess/detail/config_begin.hpp index a72f6df1fe..9224f7dd64 100644 --- a/3party/boost/boost/interprocess/detail/config_begin.hpp +++ b/3party/boost/boost/interprocess/detail/config_begin.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/detail/config_end.hpp b/3party/boost/boost/interprocess/detail/config_end.hpp index 422458e855..f871ce7546 100644 --- a/3party/boost/boost/interprocess/detail/config_end.hpp +++ b/3party/boost/boost/interprocess/detail/config_end.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/detail/file_wrapper.hpp b/3party/boost/boost/interprocess/detail/file_wrapper.hpp index 586e20db4d..e139df26a9 100644 --- a/3party/boost/boost/interprocess/detail/file_wrapper.hpp +++ b/3party/boost/boost/interprocess/detail/file_wrapper.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // @@ -60,10 +60,10 @@ class file_wrapper //!After the call, "moved" does not represent any file. //!Does not throw file_wrapper &operator=(BOOST_RV_REF(file_wrapper) moved) - { + { file_wrapper tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps to file_wrappers. @@ -73,7 +73,7 @@ class file_wrapper //!Erases a file from the system. //!Returns false on error. Never throws static bool remove(const char *name); - + //!Sets the size of the file void truncate(offset_t length); @@ -122,10 +122,10 @@ inline bool file_wrapper::get_size(offset_t &size) const { return get_file_size((file_handle_t)m_handle, size); } inline void file_wrapper::swap(file_wrapper &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_filename.swap(other.m_filename); + m_filename.swap(other.m_filename); } inline mapping_handle_t file_wrapper::get_mapping_handle() const diff --git a/3party/boost/boost/interprocess/detail/in_place_interface.hpp b/3party/boost/boost/interprocess/detail/in_place_interface.hpp index b43b2ce165..7c0966c103 100644 --- a/3party/boost/boost/interprocess/detail/in_place_interface.hpp +++ b/3party/boost/boost/interprocess/detail/in_place_interface.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp index 054322699d..9f41ba63f8 100644 --- a/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp +++ b/3party/boost/boost/interprocess/detail/intermodule_singleton.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // diff --git a/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp b/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp index 0710c0bbc1..ff4069f411 100644 --- a/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp +++ b/3party/boost/boost/interprocess/detail/intermodule_singleton_common.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // @@ -199,7 +199,7 @@ class intermodule_singleton_common private: static ThreadSafeGlobalMap &get_map() { - return *static_cast(static_cast(&mem_holder.map_mem)); + return *static_cast(static_cast(&mem_holder.map_mem[0])); } static void initialize_global_map_handle() @@ -274,7 +274,7 @@ class intermodule_singleton_common //Values: Uninitialized, Initializing, Initialized, Broken static volatile boost::uint32_t this_module_map_initialized; - //Raw memory to construct the global map manager + //Raw memory to construct the global map manager static struct mem_holder_t { ::boost::detail::max_align aligner; @@ -411,7 +411,7 @@ class intermodule_singleton_impl atomic_inc32(&rcount->singleton_ref_count); ret_ptr = rcount->ptr; } - void *data() const + void *data() const { return ret_ptr; } private: @@ -448,7 +448,7 @@ class intermodule_singleton_impl } void *data() const { return ret_ptr; } - + private: ThreadSafeGlobalMap &m_map; void *ret_ptr; diff --git a/3party/boost/boost/interprocess/detail/interprocess_tester.hpp b/3party/boost/boost/interprocess/detail/interprocess_tester.hpp index 2581776745..2fcc07bcc1 100644 --- a/3party/boost/boost/interprocess/detail/interprocess_tester.hpp +++ b/3party/boost/boost/interprocess/detail/interprocess_tester.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-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) // diff --git a/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp b/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp index 16d3505883..ca2ff4acfa 100644 --- a/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp +++ b/3party/boost/boost/interprocess/detail/intersegment_ptr.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -177,7 +177,7 @@ struct intersegment_base void set_mode(std::size_t mode) { - BOOST_ASSERT(mode < is_max_mode); + BOOST_ASSERT(mode < is_max_mode); members.direct.ctrl = mode; } @@ -309,13 +309,13 @@ struct flat_map_intersegment void *ptr_base; void *this_base; get_segment_info_and_offset(this, this_info, this_offset, this_base); - + if(!this_info.group){ this->set_mode(is_in_stack); this->members.direct.addr = const_cast(ptr); } else{ - get_segment_info_and_offset(ptr, ptr_info, ptr_offset, ptr_base); + get_segment_info_and_offset(ptr, ptr_info, ptr_offset, ptr_base); if(ptr_info.group != this_info.group){ this->set_mode(is_pointee_outside); @@ -383,7 +383,7 @@ struct flat_map_intersegment }; vector m_segments; multi_segment_services &m_ms_services; - + public: segment_group_t(multi_segment_services &ms_services) : m_ms_services(ms_services) @@ -445,7 +445,7 @@ struct flat_map_intersegment typedef Mutex mutex_type; //!Maps base addresses and segment information //!(size and segment group and id)* - + ptr_to_segment_info_t m_ptr_to_segment_info; ~mappings_t() @@ -486,7 +486,7 @@ struct flat_map_intersegment --it; char * segment_base = const_cast(reinterpret_cast(it->first)); std::size_t segment_size = it->second.size; - + if(segment_base <= reinterpret_cast(ptr) && (segment_base + segment_size) >= reinterpret_cast(ptr)){ segment = it->second; @@ -552,7 +552,7 @@ struct flat_map_intersegment s_groups.insert(segment_group_t(*services)); BOOST_ASSERT(ret.second); return &*ret.first; - } + } } static bool delete_group(segment_group_id id) @@ -574,7 +574,7 @@ struct flat_map_intersegment } } return success; - } + } } }; @@ -663,17 +663,17 @@ class intersegment_ptr : public flat_map_intersegment //!Pointer-like -> operator. It can return 0 pointer. //!Never throws. - pointer operator->() const + pointer operator->() const { return self_t::get(); } //!Dereferencing operator, if it is a null intersegment_ptr behavior //!is undefined. Never throws. - reference operator* () const + reference operator* () const { return *(self_t::get()); } //!Indexing operator. //!Never throws. - reference operator[](std::ptrdiff_t idx) const + reference operator[](std::ptrdiff_t idx) const { return self_t::get()[idx]; } //!Assignment from pointer (saves extra conversion). @@ -690,15 +690,15 @@ class intersegment_ptr : public flat_map_intersegment //!are assignable, intersegment_ptrs will be assignable. Never throws. template intersegment_ptr& operator= (const intersegment_ptr & ptr) - { + { pointer p(ptr.get()); (void)p; - base_t::set_from_other(ptr); return *this; + base_t::set_from_other(ptr); return *this; } //!intersegment_ptr + std::ptrdiff_t. //!Never throws. - intersegment_ptr operator+ (std::ptrdiff_t idx) const - { + intersegment_ptr operator+ (std::ptrdiff_t idx) const + { intersegment_ptr result (*this); result.inc_offset(idx*sizeof(T)); return result; @@ -706,8 +706,8 @@ class intersegment_ptr : public flat_map_intersegment //!intersegment_ptr - std::ptrdiff_t. //!Never throws. - intersegment_ptr operator- (std::ptrdiff_t idx) const - { + intersegment_ptr operator- (std::ptrdiff_t idx) const + { intersegment_ptr result (*this); result.dec_offset(idx*sizeof(T)); return result; @@ -745,7 +745,7 @@ class intersegment_ptr : public flat_map_intersegment //!Safe bool conversion operator. //!Never throws. - operator unspecified_bool_type() const + operator unspecified_bool_type() const { return base_t::is_null()? 0 : &self_t::unspecified_bool_type_func; } //!Not operator. Not needed in theory, but improves portability. @@ -784,12 +784,12 @@ class intersegment_ptr : public flat_map_intersegment template inline bool operator ==(const intersegment_ptr &left, const intersegment_ptr &right) -{ +{ //Make sure both pointers can be compared bool e = typename intersegment_ptr::pointer(0) == typename intersegment_ptr::pointer(0); (void)e; - return left._equal(right); + return left._equal(right); } //!Returns true if *this is less than other. @@ -798,12 +798,12 @@ bool operator ==(const intersegment_ptr &left, template inline bool operator <(const intersegment_ptr &left, const intersegment_ptr &right) -{ +{ //Make sure both pointers can be compared bool e = typename intersegment_ptr::pointer(0) < typename intersegment_ptr::pointer(0); (void)e; - return left._less(right); + return left._less(right); } template inline diff --git a/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp b/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp index f9ecb8a860..4161d30f2d 100644 --- a/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp +++ b/3party/boost/boost/interprocess/detail/managed_memory_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -172,14 +172,14 @@ class basic_managed_memory_impl //This function should not throw. The index construction can //throw if constructor allocates memory. So we must catch it. BOOST_TRY{ - //Let's construct the allocator in memory + //Let's construct the allocator in memory mp_header = new(addr) segment_manager(size); } BOOST_CATCH(...){ return false; } BOOST_CATCH_END - return true; + return true; } //!Connects to a segment manager in the reserved buffer. Never throws. @@ -192,7 +192,7 @@ class basic_managed_memory_impl //!Frees resources. Never throws. bool close_impl() - { + { bool ret = mp_header != 0; mp_header = 0; return ret; @@ -254,12 +254,12 @@ class basic_managed_memory_impl handle_t get_handle_from_address (const void *ptr) const { return (handle_t)(reinterpret_cast(ptr) - - reinterpret_cast(this->get_address())); + reinterpret_cast(this->get_address())); } //!Returns true if the address belongs to the managed memory segment bool belongs_to_segment (const void *ptr) const - { + { return ptr >= this->get_address() && ptr < (reinterpret_cast(this->get_address()) + this->get_size()); } @@ -292,7 +292,7 @@ class basic_managed_memory_impl allocation_command (boost::interprocess::allocation_type command, size_type limit_size, size_type preferred_size,size_type &received_size, T *reuse_ptr = 0) - { + { return mp_header->allocation_command (command, limit_size, preferred_size, received_size, reuse_ptr); } @@ -724,7 +724,7 @@ class create_open_func : m_frontend(frontend), m_type(type){} bool operator()(void *addr, typename BasicManagedMemoryImpl::size_type size, bool created) const - { + { if(((m_type == DoOpen) && created) || ((m_type == DoCreate) && !created)) return false; diff --git a/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp b/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp index 654c8bb9f3..cd7ed9c3cf 100644 --- a/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp +++ b/3party/boost/boost/interprocess/detail/managed_multi_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -36,7 +36,7 @@ #include //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include +#include #include //!\file @@ -69,7 +69,7 @@ class basic_managed_multi_shared_memory self_t; typedef ipcdetail::basic_managed_memory_impl base_t; - + typedef typename MemoryAlgorithm::void_pointer void_pointer; typedef typename ipcdetail:: managed_open_or_create_impl managed_impl; @@ -100,7 +100,7 @@ class basic_managed_multi_shared_memory // if(!m_shmem.create(m_mem_name, size, m_addr)) // return 0; // return m_shmem.get_address(); -// } +// } // private: // shared_memory &m_shmem; // const char *m_mem_name; @@ -134,7 +134,7 @@ class basic_managed_multi_shared_memory typename shmem_list_t::value_type &m_impl = *mp_frontend->m_shmem_list.rbegin(); return result_type(m_impl.get_real_address(), m_impl.get_real_size()-1); }*/ - return result_type(static_cast(0), 0); + return result_type(static_cast(0), 0); } virtual bool update_segments () @@ -174,7 +174,7 @@ class basic_managed_multi_shared_memory : mp_frontend(frontend), m_type(type), m_segment_number(segment_number){} bool operator()(void *addr, size_type size, bool created) const - { + { if(((m_type == DoOpen) && created) || ((m_type == DoCreate) && !created)) return false; @@ -226,7 +226,7 @@ class basic_managed_multi_shared_memory : mp_frontend(frontend){} void operator()(const mapped_region ®ion, bool last) const - { + { if(last) mp_frontend->destroy_impl(); else mp_frontend->close_impl(); } @@ -251,7 +251,7 @@ class basic_managed_multi_shared_memory const permissions &perm = permissions()) : m_group_services(get_this_pointer()) { - priv_open_or_create(create_open_func::DoCreate,name, size, perm); + priv_open_or_create(create_open_func::DoCreate,name, size, perm); } basic_managed_multi_shared_memory(open_or_create_t, @@ -301,7 +301,7 @@ class basic_managed_multi_shared_memory if(group){ void_pointer::delete_group(group); } - return false; + return false; } bool priv_new_segment(typename create_open_func::type_t type, @@ -368,7 +368,7 @@ class basic_managed_multi_shared_memory //!Frees resources. Never throws. void priv_close() - { + { if(!m_shmem_list.empty()){ bool ret; //Obtain group identifier @@ -385,7 +385,7 @@ class basic_managed_multi_shared_memory m_shmem_list.clear(); } } - + private: shmem_list_t m_shmem_list; group_services m_group_services; diff --git a/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp b/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp index a4f1f15817..06d986b96d 100644 --- a/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp +++ b/3party/boost/boost/interprocess/detail/managed_open_or_create_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // @@ -48,12 +48,12 @@ class xsi_key; template<> struct managed_open_or_create_impl_device_id_t -{ +{ typedef xsi_key type; }; #endif //BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS - + /// @endcond namespace ipcdetail { @@ -79,7 +79,7 @@ class managed_open_or_create_impl_device_holder const DeviceAbstraction &get_device() const { return dev; } - + private: DeviceAbstraction dev; }; @@ -94,9 +94,9 @@ class managed_open_or_create_impl typedef typename managed_open_or_create_impl_device_id_t::type device_id_t; typedef managed_open_or_create_impl_device_holder DevHolder; enum - { - UninitializedSegment, - InitializingSegment, + { + UninitializedSegment, + InitializingSegment, InitializedSegment, CorruptedSegment }; @@ -222,10 +222,10 @@ class managed_open_or_create_impl { this->swap(moved); } managed_open_or_create_impl &operator=(BOOST_RV_REF(managed_open_or_create_impl) moved) - { + { managed_open_or_create_impl tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } ~managed_open_or_create_impl() diff --git a/3party/boost/boost/interprocess/detail/math_functions.hpp b/3party/boost/boost/interprocess/detail/math_functions.hpp index 2fc457c683..20922b39cf 100644 --- a/3party/boost/boost/interprocess/detail/math_functions.hpp +++ b/3party/boost/boost/interprocess/detail/math_functions.hpp @@ -1,7 +1,7 @@ ////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Stephen Cleary 2000. -// (C) Copyright Ion Gaztanaga 2007-2011. +// (C) Copyright Ion Gaztanaga 2007-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -93,7 +93,7 @@ inline std::size_t floor_log2 (std::size_t x) std::size_t n = x; std::size_t log2 = 0; - + for(std::size_t shift = Bits >> 1; shift; shift >>= 1){ std::size_t tmp = n >> shift; if (tmp) diff --git a/3party/boost/boost/interprocess/detail/min_max.hpp b/3party/boost/boost/interprocess/detail/min_max.hpp index 1f4ebdfc33..63ce7efd90 100644 --- a/3party/boost/boost/interprocess/detail/min_max.hpp +++ b/3party/boost/boost/interprocess/detail/min_max.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. +// (C) Copyright Ion Gaztanaga 2005-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/interprocess/detail/move.hpp b/3party/boost/boost/interprocess/detail/move.hpp index 1ec43b211b..87684f6217 100644 --- a/3party/boost/boost/interprocess/detail/move.hpp +++ b/3party/boost/boost/interprocess/detail/move.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2010-2011. +// (C) Copyright Ion Gaztanaga 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) diff --git a/3party/boost/boost/interprocess/detail/mpl.hpp b/3party/boost/boost/interprocess/detail/mpl.hpp index e2c7f52d24..4c5e1f1b9e 100644 --- a/3party/boost/boost/interprocess/detail/mpl.hpp +++ b/3party/boost/boost/interprocess/detail/mpl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. +// (C) Copyright Ion Gaztanaga 2005-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/interprocess/detail/multi_segment_services.hpp b/3party/boost/boost/interprocess/detail/multi_segment_services.hpp index d1451d3379..f625a9bc38 100644 --- a/3party/boost/boost/interprocess/detail/multi_segment_services.hpp +++ b/3party/boost/boost/interprocess/detail/multi_segment_services.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/detail/named_proxy.hpp b/3party/boost/boost/interprocess/detail/named_proxy.hpp index c2aafed9ac..14a9aa0a78 100644 --- a/3party/boost/boost/interprocess/detail/named_proxy.hpp +++ b/3party/boost/boost/interprocess/detail/named_proxy.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -93,7 +93,7 @@ struct CtorNArg : public placement_destroy {} tuple args_; -}; +}; //!Describes a proxy class that implements named //!allocation syntax. @@ -119,7 +119,7 @@ class named_proxy template T *operator()(Args &&...args) const - { + { CtorNArg &&ctor_obj = CtorNArg (boost::forward(args)...); return mp_mngr->template @@ -199,7 +199,7 @@ struct Ctor0Arg : public placement_destroy // private: // void construct(void *mem, true_) // { new((void*)mem)T(*m_p1, *m_p2); } -// +// // void construct(void *mem, false_) // { new((void*)mem)T(m_p1, m_p2); } // @@ -293,7 +293,7 @@ class named_proxy //!makes a named allocation and calls the //!default constructor T *operator()() const - { + { Ctor0Arg ctor_obj; return mp_mngr->template generic_construct(mp_name, m_num, m_find, m_dothrow, ctor_obj); diff --git a/3party/boost/boost/interprocess/detail/os_file_functions.hpp b/3party/boost/boost/interprocess/detail/os_file_functions.hpp index 08decd9bc4..840079dc10 100644 --- a/3party/boost/boost/interprocess/detail/os_file_functions.hpp +++ b/3party/boost/boost/interprocess/detail/os_file_functions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -96,28 +96,28 @@ inline const char *get_temporary_path() inline file_handle_t create_new_file (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) -{ +{ unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; return winapi::create_file ( name, (unsigned int)mode, winapi::create_new, attr - , (winapi::interprocess_security_attributes*)perm.get_permissions()); + , (winapi::interprocess_security_attributes*)perm.get_permissions()); } inline file_handle_t create_or_open_file (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) -{ +{ unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; return winapi::create_file ( name, (unsigned int)mode, winapi::open_always, attr - , (winapi::interprocess_security_attributes*)perm.get_permissions()); + , (winapi::interprocess_security_attributes*)perm.get_permissions()); } inline file_handle_t open_existing_file (const char *name, mode_t mode, bool temporary = false) -{ +{ unsigned long attr = temporary ? winapi::file_attribute_temporary : 0; return winapi::create_file - (name, (unsigned int)mode, winapi::open_existing, attr, 0); + (name, (unsigned int)mode, winapi::open_existing, attr, 0); } inline bool delete_file(const char *name) @@ -177,7 +177,7 @@ inline bool get_file_pointer(file_handle_t hnd, offset_t &off) { return winapi::set_file_pointer_ex(hnd, 0, &off, winapi::file_current); } inline bool write_file(file_handle_t hnd, const void *data, std::size_t numdata) -{ +{ unsigned long written; return 0 != winapi::write_file(hnd, data, (unsigned long)numdata, &written, 0); } @@ -189,9 +189,9 @@ inline bool close_file(file_handle_t hnd) { return 0 != winapi::close_handle(hnd); } inline bool acquire_file_lock(file_handle_t hnd) -{ +{ static winapi::interprocess_overlapped overlapped; - const unsigned long len = ~((unsigned long)(0u)); + const unsigned long len = ((unsigned long)-1); // winapi::interprocess_overlapped overlapped; // std::memset(&overlapped, 0, sizeof(overlapped)); return winapi::lock_file_ex @@ -199,8 +199,8 @@ inline bool acquire_file_lock(file_handle_t hnd) } inline bool try_acquire_file_lock(file_handle_t hnd, bool &acquired) -{ - const unsigned long len = ~((unsigned long)(0u)); +{ + const unsigned long len = ((unsigned long)-1); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); if(!winapi::lock_file_ex @@ -208,30 +208,30 @@ inline bool try_acquire_file_lock(file_handle_t hnd, bool &acquired) 0, len, len, &overlapped)){ return winapi::get_last_error() == winapi::error_lock_violation ? acquired = false, true : false; - + } return (acquired = true); } inline bool release_file_lock(file_handle_t hnd) -{ - const unsigned long len = ~((unsigned long)(0u)); +{ + const unsigned long len = ((unsigned long)-1); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); return winapi::unlock_file_ex(hnd, 0, len, len, &overlapped); } inline bool acquire_file_lock_sharable(file_handle_t hnd) -{ - const unsigned long len = ~((unsigned long)(0u)); +{ + const unsigned long len = ((unsigned long)-1); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); return winapi::lock_file_ex(hnd, 0, 0, len, len, &overlapped); } inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) -{ - const unsigned long len = ~((unsigned long)(0u)); +{ + const unsigned long len = ((unsigned long)-1); winapi::interprocess_overlapped overlapped; std::memset(&overlapped, 0, sizeof(overlapped)); if(!winapi::lock_file_ex @@ -406,7 +406,7 @@ inline const char *get_temporary_path() inline file_handle_t create_new_file (const char *name, mode_t mode, const permissions & perm = permissions(), bool temporary = false) -{ +{ (void)temporary; int ret = ::open(name, ((int)mode) | O_EXCL | O_CREAT, perm.get_permissions()); if(ret >= 0){ @@ -439,7 +439,7 @@ inline file_handle_t create_or_open_file inline file_handle_t open_existing_file (const char *name, mode_t mode, bool temporary = false) -{ +{ (void)temporary; return ::open(name, (int)mode); } @@ -459,7 +459,7 @@ inline bool truncate_file (file_handle_t hnd, std::size_t size) } inline bool get_file_size(file_handle_t hnd, offset_t &size) -{ +{ struct stat data; bool ret = 0 == ::fstat(hnd, &data); if(ret){ @@ -472,7 +472,7 @@ inline bool set_file_pointer(file_handle_t hnd, offset_t off, file_pos_t pos) { return ((off_t)(-1)) != ::lseek(hnd, off, (int)pos); } inline bool get_file_pointer(file_handle_t hnd, offset_t &off) -{ +{ off = ::lseek(hnd, 0, SEEK_CUR); return off != ((off_t)-1); } @@ -522,7 +522,7 @@ inline bool release_file_lock(file_handle_t hnd) } inline bool acquire_file_lock_sharable(file_handle_t hnd) -{ +{ struct ::flock lock; lock.l_type = F_RDLCK; lock.l_whence = SEEK_SET; @@ -532,7 +532,7 @@ inline bool acquire_file_lock_sharable(file_handle_t hnd) } inline bool try_acquire_file_lock_sharable(file_handle_t hnd, bool &acquired) -{ +{ struct flock lock; lock.l_type = F_RDLCK; lock.l_whence = SEEK_SET; @@ -601,7 +601,7 @@ inline bool delete_subdirectories_recursive || (de->d_name[1] == '.' && de->d_name[2] == '\0' )) ){ continue; } - if(dont_delete_this && std::strcmp(dont_delete_this, de->d_name) == 0){ + if(dont_delete_this && std::strcmp(dont_delete_this, de->d_name) == 0){ continue; } fn = refcstrRootDirectory; diff --git a/3party/boost/boost/interprocess/detail/os_thread_functions.hpp b/3party/boost/boost/interprocess/detail/os_thread_functions.hpp index 8d769fc4e9..f881a1f462 100644 --- a/3party/boost/boost/interprocess/detail/os_thread_functions.hpp +++ b/3party/boost/boost/interprocess/detail/os_thread_functions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -104,7 +104,7 @@ typedef pthread_t OS_thread_id_t; typedef pid_t OS_process_id_t; struct OS_systemwide_thread_id_t -{ +{ OS_systemwide_thread_id_t() : pid(), tid() {} diff --git a/3party/boost/boost/interprocess/detail/pointer_type.hpp b/3party/boost/boost/interprocess/detail/pointer_type.hpp index 549b23fa6c..aa8da550c0 100644 --- a/3party/boost/boost/interprocess/detail/pointer_type.hpp +++ b/3party/boost/boost/interprocess/detail/pointer_type.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. +// (C) Copyright Ion Gaztanaga 2005-2012. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. diff --git a/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp index eb2a13e104..d5c84d405f 100644 --- a/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp +++ b/3party/boost/boost/interprocess/detail/portable_intermodule_singleton.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // @@ -54,7 +54,7 @@ static void create_tmp_subdir_and_get_pid_based_filepath s += "/"; s += file_prefix; if(creation_time){ - std::string sstamp; + std::string sstamp; get_pid_creation_time_str(sstamp); s += sstamp; } @@ -137,7 +137,7 @@ struct thread_safe_global_map_dependant delete_file(singleton_lock_file_path_); shared_memory_object::remove(shm_name_); } - + const char * const shm_name_; const char * const singleton_lock_file_path_; managed_global_memory & shm_; diff --git a/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp b/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp index e4df85a572..fa167f576f 100644 --- a/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp +++ b/3party/boost/boost/interprocess/detail/posix_time_types_wrk.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/detail/preprocessor.hpp b/3party/boost/boost/interprocess/detail/preprocessor.hpp index 47b591c901..431e96e1c0 100644 --- a/3party/boost/boost/interprocess/detail/preprocessor.hpp +++ b/3party/boost/boost/interprocess/detail/preprocessor.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // @@ -57,21 +57,10 @@ #ifndef BOOST_NO_RVALUE_REFERENCES - #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - - #define BOOST_INTERPROCESS_PP_PARAM_INIT(z, n, data) \ - BOOST_PP_CAT(m_p, n) (BOOST_PP_CAT(p, n)) \ - //! - - - #else //#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - #define BOOST_INTERPROCESS_PP_PARAM_INIT(z, n, data) \ BOOST_PP_CAT(m_p, n) (::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(p, n) )) \ //! - #endif //#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - #else //#ifndef BOOST_NO_RVALUE_REFERENCES #define BOOST_INTERPROCESS_PP_PARAM_INIT(z, n, data) \ @@ -79,31 +68,104 @@ //! #endif -#define BOOST_INTERPROCESS_PP_PARAM_INC(z, n, data) \ - BOOST_PP_CAT(++m_p, n) \ -//! - #ifndef BOOST_NO_RVALUE_REFERENCES -#if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) + #if defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) -#define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ - BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ -//! + namespace boost { + namespace interprocess { + namespace ipcdetail { + template + struct ref_holder; + + template + struct ref_holder + { + ref_holder(T &t) + : t_(t) + {} + T &t_; + T & get() { return t_; } + T & get_lvalue() { return t_; } + }; + + template + struct ref_holder + { + ref_holder(const T &t) + : t_(t) + {} + const T &t_; + const T & get() { return t_; } + const T & get_lvalue() { return t_; } + }; + + template + struct ref_holder + { + ref_holder(const T &t) + : t_(t) + {} + const T &t_; + const T & get() { return t_; } + const T & get_lvalue() { return t_; } + }; + + template + struct ref_holder + { + ref_holder(T &&t) + : t_(t) + {} + T &t_; + T && get() { return ::boost::move(t_); } + T & get_lvalue() { return t_; } + }; + + template + struct ref_holder + { + ref_holder(T &&t) + : t(t) + {} + T &t; + T && get() { return ::boost::move(t_); } + T & get_lvalue() { return t_; } + }; + + } //namespace ipcdetail { + } //namespace interprocess { + } //namespace boost { + + #define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ + ::boost::interprocess::ipcdetail::ref_holder BOOST_PP_CAT(m_p, n); \ + //! + + #define BOOST_INTERPROCESS_PP_PARAM_INC(z, n, data) \ + BOOST_PP_CAT(++m_p, n).get_lvalue() \ + //! + + #else //BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG + + #define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data)\ + BOOST_PP_CAT(P, n) && BOOST_PP_CAT(m_p, n); \ + //! + + #define BOOST_INTERPROCESS_PP_PARAM_INC(z, n, data) \ + BOOST_PP_CAT(++m_p, n) \ + //! + + #endif //defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) #else + #define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ + BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ + //! -#define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ - BOOST_PP_CAT(P, n) && BOOST_PP_CAT(m_p, n); \ -//! + #define BOOST_INTERPROCESS_PP_PARAM_INC(z, n, data) \ + BOOST_PP_CAT(++m_p, n) \ + //! -#endif //defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) - - -#else -#define BOOST_INTERPROCESS_PP_PARAM_DEFINE(z, n, data) \ - BOOST_PP_CAT(P, n) & BOOST_PP_CAT(m_p, n); \ -//! #endif #define BOOST_INTERPROCESS_PP_PARAM_FORWARD(z, n, data) \ @@ -112,24 +174,26 @@ #if !defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) -#include + #define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) BOOST_PP_CAT(this->m_p, n).get() \ + //! -#define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) \ -::boost::container::container_detail::stored_ref< BOOST_PP_CAT(P, n) >::forward( BOOST_PP_CAT(m_p, n) ) \ -//! + #define BOOST_INTERPROCESS_PP_MEMBER_IT_FORWARD(z, n, data) \ + BOOST_PP_CAT(*m_p, n).get_lvalue() \ + //! #else -#define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) \ -::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(m_p, n) ) \ -//! + #define BOOST_INTERPROCESS_PP_MEMBER_FORWARD(z, n, data) \ + ::boost::forward< BOOST_PP_CAT(P, n) >( BOOST_PP_CAT(m_p, n) ) \ + //! + + #define BOOST_INTERPROCESS_PP_MEMBER_IT_FORWARD(z, n, data) \ + BOOST_PP_CAT(*m_p, n) \ + //! + #endif //!defined(BOOST_NO_RVALUE_REFERENCES) && defined(BOOST_MOVE_MSVC_10_MEMBER_RVALUE_REF_BUG) -#define BOOST_INTERPROCESS_PP_MEMBER_IT_FORWARD(z, n, data) \ -BOOST_PP_CAT(*m_p, n) \ -//! - #include #else diff --git a/3party/boost/boost/interprocess/detail/ptime_wrk.hpp b/3party/boost/boost/interprocess/detail/ptime_wrk.hpp index 8cda3a445d..63d9915b5a 100644 --- a/3party/boost/boost/interprocess/detail/ptime_wrk.hpp +++ b/3party/boost/boost/interprocess/detail/ptime_wrk.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // diff --git a/3party/boost/boost/interprocess/detail/robust_emulation.hpp b/3party/boost/boost/interprocess/detail/robust_emulation.hpp index 1feb42dc35..9fd2229dea 100644 --- a/3party/boost/boost/interprocess/detail/robust_emulation.hpp +++ b/3party/boost/boost/interprocess/detail/robust_emulation.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2010-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // @@ -132,7 +132,7 @@ class robust_mutex_lock_file throw interprocess_exception(other_error, "Robust emulation robust_mutex_lock_file constructor failed: create_file filed with unexpected error"); } } - } + } ~robust_mutex_lock_file() { @@ -324,7 +324,7 @@ inline bool robust_spin_mutex::robust_check() return false; } atomic_write32(&this->state, fixing_state); - return true; + return true; } template diff --git a/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp b/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp index 2b715d8f5e..2325cd303f 100644 --- a/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp +++ b/3party/boost/boost/interprocess/detail/segment_manager_helper.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -130,7 +130,7 @@ struct block_header template CharType *name() const - { + { return const_cast(reinterpret_cast (reinterpret_cast(this) + name_offset())); } @@ -175,7 +175,7 @@ struct block_header { return block_header_from_value(value, sizeof(T), ::boost::alignment_of::value); } static block_header *block_header_from_value(const void *value, std::size_t sz, std::size_t algn) - { + { block_header * hdr = const_cast (reinterpret_cast(reinterpret_cast(value) - @@ -189,7 +189,7 @@ struct block_header template static block_header *from_first_header(Header *header) - { + { block_header * hdr = reinterpret_cast*>(reinterpret_cast(header) + get_rounded_size(size_type(sizeof(Header)), size_type(::boost::alignment_of >::value))); @@ -199,7 +199,7 @@ struct block_header template static Header *to_first_header(block_header *bheader) - { + { Header * hdr = reinterpret_cast(reinterpret_cast(bheader) - get_rounded_size(size_type(sizeof(Header)), size_type(::boost::alignment_of >::value))); @@ -478,7 +478,7 @@ struct segment_manager_iterator_transform , segment_manager_iterator_value_adaptor > { typedef segment_manager_iterator_value_adaptor result_type; - + result_type operator()(const typename Iterator::value_type &arg) const { return result_type(arg); } }; diff --git a/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp b/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp index 28e7341406..e4e867e3f8 100644 --- a/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp +++ b/3party/boost/boost/interprocess/detail/tmp_dir_helpers.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-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) // diff --git a/3party/boost/boost/interprocess/detail/transform_iterator.hpp b/3party/boost/boost/interprocess/detail/transform_iterator.hpp index 922c875d6d..56bd0e56c9 100644 --- a/3party/boost/boost/interprocess/detail/transform_iterator.hpp +++ b/3party/boost/boost/interprocess/detail/transform_iterator.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. +// (C) Copyright Ion Gaztanaga 2005-2012. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. diff --git a/3party/boost/boost/interprocess/detail/type_traits.hpp b/3party/boost/boost/interprocess/detail/type_traits.hpp index 7a582fee5c..ade623f1e6 100644 --- a/3party/boost/boost/interprocess/detail/type_traits.hpp +++ b/3party/boost/boost/interprocess/detail/type_traits.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // (C) Copyright John Maddock 2000. -// (C) Copyright Ion Gaztanaga 2005-2011. +// (C) Copyright Ion Gaztanaga 2005-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -117,6 +117,12 @@ struct remove_volatile typedef T type; }; +template +struct remove_const_volatile +{ + typedef typename remove_const::type>::type type; +}; + template struct is_same { @@ -136,6 +142,13 @@ struct is_same static const bool value = sizeof(yes_type) == sizeof(is_same_tester(t,u)); }; +template +struct is_cv_same +{ + static const bool value = is_same< typename remove_const_volatile::type + , typename remove_const_volatile::type >::value; +}; + } // namespace ipcdetail } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/detail/utilities.hpp b/3party/boost/boost/interprocess/detail/utilities.hpp index fcb211fb09..3b486ddcf8 100644 --- a/3party/boost/boost/interprocess/detail/utilities.hpp +++ b/3party/boost/boost/interprocess/detail/utilities.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. +// (C) Copyright Ion Gaztanaga 2005-2012. // (C) Copyright Gennaro Prota 2003 - 2004. // // Distributed under the Boost Software License, Version 1.0. @@ -31,8 +31,10 @@ #include #include #include +#include #include #include +#include namespace boost { namespace interprocess { @@ -86,7 +88,10 @@ inline SizeType get_truncated_size_po2(SizeType orig_size, SizeType multiple) template struct ct_rounded_size { - static const std::size_t value = ((OrigSize-1)/RoundTo+1)*RoundTo; + BOOST_STATIC_ASSERT((RoundTo != 0)); + static const std::size_t intermediate_value = (OrigSize-1)/RoundTo+1; + BOOST_STATIC_ASSERT(intermediate_value <= std::size_t(-1)/RoundTo); + static const std::size_t value = intermediate_value*RoundTo; }; // Gennaro Prota wrote this. Thanks! @@ -133,6 +138,59 @@ addressof(T& v) &const_cast(reinterpret_cast(v))); } +template +struct sqrt_size_type_max +{ + static const SizeType value = (SizeType(1) << (sizeof(SizeType)*(CHAR_BIT/2)))-1; +}; + +template +inline bool multiplication_overflows(SizeType a, SizeType b) +{ + const SizeType sqrt_size_max = sqrt_size_type_max::value; + return //Fast runtime check + ( (a | b) > sqrt_size_max && + //Slow division check + b && a > SizeType(-1)/b + ); +} + +template +inline bool size_overflows(SizeType count) +{ + //Compile time-check + BOOST_STATIC_ASSERT(SztSizeOfType <= SizeType(-1)); + //Runtime check + return multiplication_overflows(SizeType(SztSizeOfType), count); +} + +template +class pointer_size_t_caster +{ + public: + explicit pointer_size_t_caster(std::size_t sz) + : m_ptr(reinterpret_cast(sz)) + {} + + explicit pointer_size_t_caster(RawPointer p) + : m_ptr(p) + {} + + std::size_t size() const + { return reinterpret_cast(m_ptr); } + + RawPointer pointer() const + { return m_ptr; } + + private: + RawPointer m_ptr; +}; + + +template +inline bool sum_overflows(SizeType a, SizeType b) +{ return SizeType(-1) - a < b; } + //Anti-exception node eraser template class value_eraser @@ -140,7 +198,7 @@ class value_eraser public: value_eraser(Cont & cont, typename Cont::iterator it) : m_cont(cont), m_index_it(it), m_erase(true){} - ~value_eraser() + ~value_eraser() { if(m_erase) m_cont.erase(m_index_it); } void release() { m_erase = false; } diff --git a/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp b/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp index 482a0056a7..5f2a94a31b 100644 --- a/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp +++ b/3party/boost/boost/interprocess/detail/variadic_templates_tools.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/detail/win32_api.hpp b/3party/boost/boost/interprocess/detail/win32_api.hpp index c53725ca3b..b367bbaf37 100644 --- a/3party/boost/boost/interprocess/detail/win32_api.hpp +++ b/3party/boost/boost/interprocess/detail/win32_api.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -50,6 +50,7 @@ static const unsigned long error_invalid_handle = 6L; static const unsigned long error_sharing_violation = 32L; static const unsigned long error_file_not_found = 2u; static const unsigned long error_no_more_files = 18u; +static const unsigned long error_not_locked = 158L; //Retries in CreateFile, see http://support.microsoft.com/kb/316609 static const unsigned int error_sharing_violation_tries = 3u; static const unsigned int error_sharing_violation_sleep_ms = 250u; @@ -61,6 +62,7 @@ static const unsigned long mutex_all_access = (0x000F0000L)|(0x00100000L)|0x static const unsigned long page_readonly = 0x02; static const unsigned long page_readwrite = 0x04; static const unsigned long page_writecopy = 0x08; +static const unsigned long page_noaccess = 0x01; static const unsigned long standard_rights_required = 0x000F0000L; static const unsigned long section_query = 0x0001; @@ -239,17 +241,16 @@ struct wchar_variant } value; }; - struct IUnknown_BIPC - { - public: - virtual long __stdcall QueryInterface( - /* [in] */ const GUID_BIPC &riid, - /* [iid_is][out] */ void **ppvObject) = 0; +struct IUnknown_BIPC +{ + public: + virtual long __stdcall QueryInterface( + const GUID_BIPC &riid, // [in] + void **ppvObject) = 0; // [iid_is][out] - virtual unsigned long __stdcall AddRef( void) = 0; - - virtual unsigned long __stdcall Release( void) = 0; - }; + virtual unsigned long __stdcall AddRef (void) = 0; + virtual unsigned long __stdcall Release(void) = 0; +}; struct IWbemClassObject_BIPC : public IUnknown_BIPC { @@ -357,7 +358,6 @@ struct IWbemClassObject_BIPC : public IUnknown_BIPC }; - struct IWbemContext_BIPC : public IUnknown_BIPC { public: @@ -585,8 +585,6 @@ public: }; - - struct interprocess_overlapped { unsigned long *internal; @@ -661,7 +659,7 @@ struct system_info { unsigned short wProcessorRevision; }; -typedef struct _interprocess_memory_basic_information +struct interprocess_memory_basic_information { void * BaseAddress; void * AllocationBase; @@ -670,16 +668,16 @@ typedef struct _interprocess_memory_basic_information unsigned long State; unsigned long Protect; unsigned long Type; -} interprocess_memory_basic_information; +}; -typedef struct _interprocess_acl +struct interprocess_acl { unsigned char AclRevision; unsigned char Sbz1; unsigned short AclSize; unsigned short AceCount; unsigned short Sbz2; -} interprocess_acl; +}; typedef struct _interprocess_security_descriptor { @@ -876,6 +874,8 @@ extern "C" __declspec(dllimport) int __stdcall DeleteFileA (const char *); extern "C" __declspec(dllimport) int __stdcall MoveFileExA (const char *, const char *, unsigned long); extern "C" __declspec(dllimport) void __stdcall GetSystemInfo (struct system_info *); extern "C" __declspec(dllimport) int __stdcall FlushViewOfFile (void *, std::size_t); +extern "C" __declspec(dllimport) int __stdcall VirtualUnlock (void *, std::size_t); +extern "C" __declspec(dllimport) int __stdcall VirtualProtect (void *, std::size_t, unsigned long, unsigned long *); extern "C" __declspec(dllimport) int __stdcall FlushFileBuffers (void *); extern "C" __declspec(dllimport) int __stdcall GetFileSizeEx (void *, __int64 *size); extern "C" __declspec(dllimport) unsigned long __stdcall FormatMessageA @@ -1033,7 +1033,7 @@ inline bool duplicate_current_process_handle , duplicate_same_access); } -inline long get_file_type(void *hFile) +inline unsigned long get_file_type(void *hFile) { return GetFileType(hFile); } @@ -1137,6 +1137,12 @@ inline void get_system_info(system_info *info) inline bool flush_view_of_file(void *base_addr, std::size_t numbytes) { return 0 != FlushViewOfFile(base_addr, numbytes); } +inline bool virtual_unlock(void *base_addr, std::size_t numbytes) +{ return 0 != VirtualUnlock(base_addr, numbytes); } + +inline bool virtual_protect(void *base_addr, std::size_t numbytes, unsigned long flNewProtect, unsigned long &lpflOldProtect) +{ return 0 != VirtualProtect(base_addr, numbytes, flNewProtect, &lpflOldProtect); } + inline bool flush_file_buffers(void *handle) { return 0 != FlushFileBuffers(handle); } diff --git a/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp b/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp index a716e270a7..194e566aae 100644 --- a/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp +++ b/3party/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // @@ -68,8 +68,8 @@ class windows_semaphore_based_map //in max_count and initial count parameters. //Also, max count must be bigger than 0 and bigger or equal than initial count. if(sizeof(void*) == sizeof(boost::uint32_t)){ - //This means that for 32 bit processes, a semaphore count (31 usable bits) is - //enough to store 4 byte aligned memory (4GB -> 32 bits - 2 bits = 30 bits). + //This means that for 32 bit processes, a semaphore count (31 usable bits) is + //enough to store 4 byte aligned memory (4GB -> 32 bits - 2 bits = 30 bits). //The max count will hold the pointer value and current semaphore count //will be zero. // @@ -224,7 +224,7 @@ class windows_semaphore_based_map m_sem_count.close(); //Once scoped_lock unlocks the mutex, the destructor will close the handle... } - + private: winapi_mutex_wrapper m_mtx_lock; winapi_semaphore_wrapper m_sem_map; diff --git a/3party/boost/boost/interprocess/detail/workaround.hpp b/3party/boost/boost/interprocess/detail/workaround.hpp index 884b8680a6..d410e74067 100644 --- a/3party/boost/boost/interprocess/detail/workaround.hpp +++ b/3party/boost/boost/interprocess/detail/workaround.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -27,7 +27,7 @@ #define BOOST_INTERPROCESS_POSIX_PROCESS_SHARED #endif #endif - + #if defined(_POSIX_BARRIERS) && ((_POSIX_BARRIERS - 0) > 0) #define BOOST_INTERPROCESS_POSIX_BARRIERS #endif @@ -39,7 +39,7 @@ #endif //Some platforms have a limited (name length) named semaphore support #elif (defined(__FreeBSD__) && (__FreeBSD__ >= 4)) || defined(__APPLE__) - #define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES + #define BOOST_INTERPROCESS_POSIX_NAMED_SEMAPHORES #endif #if ((defined _V6_ILP32_OFFBIG) &&(_V6_ILP32_OFFBIG - 0 > 0)) ||\ @@ -90,6 +90,8 @@ // hp-ux tru64 vms freebsd #if defined(__hpux) || defined(__osf__) || defined(__vms) || (defined(__FreeBSD__) && (__FreeBSD__ < 7)) #define BOOST_INTERPROCESS_FILESYSTEM_BASED_POSIX_SHARED_MEMORY + //Some systems have "jailed" environments where shm usage is restricted at runtime + //and temporary file file based shm is possible in those executions. #elif defined(__FreeBSD__) #define BOOST_INTERPROCESS_RUNTIME_FILESYSTEM_BASED_POSIX_SHARED_MEMORY #endif @@ -130,6 +132,29 @@ #define BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS 10000 #endif +//Other switches +//BOOST_INTERPROCESS_MSG_QUEUE_USES_CIRC_INDEX +//message queue uses a circular queue as index instead of an array (better performance) +//Boost version < 1.52 uses an array, so undef this if you want to communicate +//with processes compiled with those versions. +#define BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX + +//Inline attributes +#if defined(_MSC_VER) + #define BOOST_INTERPROCESS_ALWAYS_INLINE __forceinline +#elif defined (__GNUC__) + #define BOOST_INTERPROCESS_ALWAYS_INLINE __attribute__((__always_inline__)) +#else + #define BOOST_INTERPROCESS_ALWAYS_INLINE inline +#endif + +#if defined(_MSC_VER) + #define BOOST_INTERPROCESS_NEVER_INLINE __declspec(noinline) +#elif defined (__GNUC__) + #define BOOST_INTERPROCESS_NEVER_INLINE __attribute__((__noinline__)) +#endif + + #include #endif //#ifndef BOOST_INTERPROCESS_DETAIL_WORKAROUND_HPP diff --git a/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp b/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp index ef4b009bc1..b2a27501d7 100644 --- a/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp +++ b/3party/boost/boost/interprocess/detail/xsi_shared_memory_device.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // @@ -74,10 +74,10 @@ class xsi_shared_memory_device { this->swap(moved); } xsi_shared_memory_device &operator=(BOOST_RV_REF(xsi_shared_memory_device) moved) - { + { xsi_shared_memory_device tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_shared_memory_device. Does not throw @@ -178,7 +178,7 @@ inline void xsi_shared_memory_device::swap(xsi_shared_memory_device &other) { m_shm.swap(other.m_shm); std::swap(m_mode, other.m_mode); - m_name.swap(other.m_name); + m_name.swap(other.m_name); } inline mapping_handle_t xsi_shared_memory_device::get_mapping_handle() const diff --git a/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp b/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp index 14811e7e62..51af830fbd 100644 --- a/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp +++ b/3party/boost/boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // @@ -40,7 +40,7 @@ class xsi_shared_memory_file_wrapper { /// @cond BOOST_MOVABLE_BUT_NOT_COPYABLE(xsi_shared_memory_file_wrapper) - /// @endcond + /// @endcond public: xsi_shared_memory_file_wrapper() : xsi_shared_memory() {} @@ -61,10 +61,10 @@ class xsi_shared_memory_file_wrapper { this->swap(moved); } xsi_shared_memory_file_wrapper &operator=(BOOST_RV_REF(xsi_shared_memory_file_wrapper) moved) - { + { xsi_shared_memory_file_wrapper tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_shared_memory_file_wrapper. Does not throw diff --git a/3party/boost/boost/interprocess/errors.hpp b/3party/boost/boost/interprocess/errors.hpp index 9eed55a29b..345ca311f0 100644 --- a/3party/boost/boost/interprocess/errors.hpp +++ b/3party/boost/boost/interprocess/errors.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -183,7 +183,7 @@ static const ec_xlate ec_table[] = }; inline error_code_t lookup_error(native_error_t err) -{ +{ const ec_xlate *cur = &ec_table[0], *end = cur + sizeof(ec_table)/sizeof(ec_xlate); for (;cur != end; ++cur ){ diff --git a/3party/boost/boost/interprocess/exceptions.hpp b/3party/boost/boost/interprocess/exceptions.hpp index a4f196f0be..b9ab45bec8 100644 --- a/3party/boost/boost/interprocess/exceptions.hpp +++ b/3party/boost/boost/interprocess/exceptions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/file_mapping.hpp b/3party/boost/boost/interprocess/file_mapping.hpp index 2a4e4cca00..58428604c4 100644 --- a/3party/boost/boost/interprocess/file_mapping.hpp +++ b/3party/boost/boost/interprocess/file_mapping.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -61,7 +61,7 @@ class file_mapping { file_mapping tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps to file_mappings. @@ -111,10 +111,10 @@ inline const char *file_mapping::get_name() const { return m_filename.c_str(); } inline void file_mapping::swap(file_mapping &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_filename.swap(other.m_filename); + m_filename.swap(other.m_filename); } inline mapping_handle_t file_mapping::get_mapping_handle() const diff --git a/3party/boost/boost/interprocess/indexes/flat_map_index.hpp b/3party/boost/boost/interprocess/indexes/flat_map_index.hpp index bac387e268..52bf88ac7a 100644 --- a/3party/boost/boost/interprocess/indexes/flat_map_index.hpp +++ b/3party/boost/boost/interprocess/indexes/flat_map_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/indexes/iset_index.hpp b/3party/boost/boost/interprocess/indexes/iset_index.hpp index 8fc91466f3..b1abededf3 100644 --- a/3party/boost/boost/interprocess/indexes/iset_index.hpp +++ b/3party/boost/boost/interprocess/indexes/iset_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -82,7 +82,7 @@ class iset_index struct intrusive_key_value_less { bool operator()(const intrusive_compare_key_type &i, const value_type &b) const - { + { std::size_t blen = b.name_length(); return (i.m_len < blen) || (i.m_len == blen && @@ -91,7 +91,7 @@ class iset_index } bool operator()(const value_type &b, const intrusive_compare_key_type &i) const - { + { std::size_t blen = b.name_length(); return (blen < i.m_len) || (blen == i.m_len && diff --git a/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp b/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp index 3c5f85526c..a23c8461d2 100644 --- a/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp +++ b/3party/boost/boost/interprocess/indexes/iunordered_set_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -58,21 +58,21 @@ struct iunordered_set_index_aux struct equal_function { bool operator()(const intrusive_compare_key_type &i, const value_type &b) const - { + { return (i.m_len == b.name_length()) && (std::char_traits::compare (i.mp_str, b.name(), i.m_len) == 0); } bool operator()(const value_type &b, const intrusive_compare_key_type &i) const - { + { return (i.m_len == b.name_length()) && (std::char_traits::compare (i.mp_str, b.name(), i.m_len) == 0); } bool operator()(const value_type &b1, const value_type &b2) const - { + { return (b1.name_length() == b2.name_length()) && (std::char_traits::compare (b1.name(), b2.name(), b1.name_length()) == 0); @@ -190,7 +190,7 @@ class iunordered_set_index bucket_ptr shunk_p = alloc.allocation_command (boost::interprocess::shrink_in_place | boost::interprocess::nothrow_allocation, received_size, received_size, received_size, buckets).first; - BOOST_ASSERT(buckets == shunk_p); + BOOST_ASSERT(buckets == shunk_p); (void)shunk_p; bucket_ptr buckets_init = buckets + received_size; for(size_type i = 0; i < (old_size - received_size); ++i){ @@ -290,7 +290,7 @@ class iunordered_set_index size_type cur_size = this->size(); size_type cur_count = this->bucket_count(); bucket_ptr old_p = this->bucket_pointer(); - + if(!this->size() && old_p != bucket_ptr(&this->init_bucket)){ this->rehash(bucket_traits(bucket_ptr(&this->init_bucket), 1)); destroy_buckets(this->alloc, old_p, cur_count); @@ -337,7 +337,7 @@ class iunordered_set_index //Strong guarantee: if something goes wrong //we should remove the insertion. // - //We can use the iterator because the hash function + //We can use the iterator because the hash function //can't throw and this means that "reserve" will //throw only because of the memory allocation: //the iterator has not been invalidated. diff --git a/3party/boost/boost/interprocess/indexes/map_index.hpp b/3party/boost/boost/interprocess/indexes/map_index.hpp index 1bfc7ce310..409e4c97a1 100644 --- a/3party/boost/boost/interprocess/indexes/map_index.hpp +++ b/3party/boost/boost/interprocess/indexes/map_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/indexes/null_index.hpp b/3party/boost/boost/interprocess/indexes/null_index.hpp index a0353b101c..1e1d670d71 100644 --- a/3party/boost/boost/interprocess/indexes/null_index.hpp +++ b/3party/boost/boost/interprocess/indexes/null_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp b/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp index 7cf4b85e65..2fce665d44 100644 --- a/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp +++ b/3party/boost/boost/interprocess/indexes/unordered_map_index.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/interprocess_fwd.hpp b/3party/boost/boost/interprocess/interprocess_fwd.hpp index 68fd89fb91..42f170a659 100644 --- a/3party/boost/boost/interprocess/interprocess_fwd.hpp +++ b/3party/boost/boost/interprocess/interprocess_fwd.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/ipc/message_queue.hpp b/3party/boost/boost/interprocess/ipc/message_queue.hpp index 67dd574f61..4ce5b8ac39 100644 --- a/3party/boost/boost/interprocess/ipc/message_queue.hpp +++ b/3party/boost/boost/interprocess/ipc/message_queue.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -99,7 +99,7 @@ class message_queue_t //!Sends a message stored in buffer "buffer" with size "buffer_size" in the //!message queue with priority "priority". If the message queue is full - //!the sender is blocked. Throws interprocess_error on error.*/ + //!the sender is blocked. Throws interprocess_error on error. void send (const void *buffer, size_type buffer_size, unsigned int priority); @@ -161,7 +161,7 @@ class message_queue_t //!Returns false on error. Never throws static bool remove(const char *name); - /// @cond + /// @cond private: typedef boost::posix_time::ptime ptime; bool do_receive(block_t block, @@ -227,9 +227,27 @@ class priority_functor //! //!-> offset_ptr index [max_num_msg] //! An array of pointers with size "max_num_msg" called index. Each pointer -//! points to a preallocated message. The elements of this array are +//! points to a preallocated message. Elements of this array are //! reordered in runtime in the following way: //! +//! IF BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX is defined: +//! +//! When the current number of messages is "cur_num_msg", the array +//! is treated like a circular buffer. Starting from position "cur_first_msg" +//! "cur_num_msg" in a circular way, pointers point to inserted messages and the rest +//! point to free messages. Those "cur_num_msg" pointers are +//! ordered by the priority of the pointed message and by insertion order +//! if two messages have the same priority. So the next message to be +//! used in a "receive" is pointed by index [(cur_first_msg + cur_num_msg-1)%max_num_msg] +//! and the first free message ready to be used in a "send" operation is +//! [cur_first_msg] if circular buffer is extended from front, +//! [(cur_first_msg + cur_num_msg)%max_num_msg] otherwise. +//! +//! This transforms the index in a circular buffer with an embedded free +//! message queue. +//! +//! ELSE (BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX is NOT defined): +//! //! When the current number of messages is "cur_num_msg", the first //! "cur_num_msg" pointers point to inserted messages and the rest //! point to free messages. The first "cur_num_msg" pointers are @@ -237,11 +255,12 @@ class priority_functor //! if two messages have the same priority. So the next message to be //! used in a "receive" is pointed by index [cur_num_msg-1] and the first free //! message ready to be used in a "send" operation is index [cur_num_msg]. -//! This transforms index in a fixed size priority queue with an embedded free +//! +//! This transforms the index in a fixed size priority queue with an embedded free //! message queue. //! //!-> struct message_t -//! { +//! { //! msg_hdr_t header; //! char[max_msg_size] data; //! } messages [max_num_msg]; @@ -252,7 +271,7 @@ class priority_functor template class mq_hdr_t : public ipcdetail::priority_functor -{ +{ typedef VoidPointer void_pointer; typedef msg_hdr_t msg_header; typedef typename boost::intrusive:: @@ -269,17 +288,16 @@ class mq_hdr_t //!Constructor. This object must be constructed in the beginning of the //!shared memory of the size returned by the function "get_mem_size". //!This constructor initializes the needed resources and creates - //!the internal structures like the priority index. This can throw.*/ + //!the internal structures like the priority index. This can throw. mq_hdr_t(size_type max_num_msg, size_type max_msg_size) : m_max_num_msg(max_num_msg), m_max_msg_size(max_msg_size), m_cur_num_msg(0) + #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX) + ,m_cur_first_msg(0u) + #endif { this->initialize_memory(); } - //!Returns the inserted message with top priority - msg_header * top_msg() - { return mp_index[m_cur_num_msg-1].get(); } - //!Returns true if the message queue is full bool is_full() const { return m_cur_num_msg == m_max_num_msg; } @@ -292,24 +310,196 @@ class mq_hdr_t void free_top_msg() { --m_cur_num_msg; } - //!Returns the first free msg of the free message queue - msg_header * free_msg() - { return mp_index[m_cur_num_msg].get(); } + #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX) + + typedef msg_hdr_ptr_t *iterator; + + size_type end_pos() const + { + const size_type space_until_bufend = m_max_num_msg - m_cur_first_msg; + return space_until_bufend > m_cur_num_msg + ? m_cur_first_msg + m_cur_num_msg : m_cur_num_msg - space_until_bufend; + } + + //!Returns the inserted message with top priority + msg_header &top_msg() + { + size_type pos = this->end_pos(); + return *mp_index[pos ? --pos : m_max_num_msg - 1]; + } + + //!Returns the inserted message with bottom priority + msg_header &bottom_msg() + { return *mp_index[m_cur_first_msg]; } + + iterator inserted_ptr_begin() const + { return &mp_index[m_cur_first_msg]; } + + iterator inserted_ptr_end() const + { return &mp_index[this->end_pos()]; } + + iterator lower_bound(const msg_hdr_ptr_t & value, priority_functor func) + { + iterator begin(this->inserted_ptr_begin()), end(this->inserted_ptr_end()); + if(end < begin){ + iterator idx_end = &mp_index[m_max_num_msg]; + iterator ret = std::lower_bound(begin, idx_end, value, func); + if(idx_end == ret){ + iterator idx_beg = &mp_index[0]; + ret = std::lower_bound(idx_beg, end, value, func); + //sanity check, these cases should not call lower_bound (optimized out) + assert(ret != end); + assert(ret != begin); + return ret; + } + else{ + return ret; + } + } + else{ + return std::lower_bound(begin, end, value, func); + } + } + + msg_header & insert_at(iterator where) + { + iterator inserted_ptr_end = this->inserted_ptr_end(); + iterator inserted_ptr_beg = this->inserted_ptr_begin(); + if(where == inserted_ptr_end){ + ++m_cur_num_msg; + return **inserted_ptr_end; + } + else if(where == inserted_ptr_beg){ + //unsigned integer guarantees underflow + m_cur_first_msg = m_cur_first_msg ? m_cur_first_msg : m_max_num_msg; + --m_cur_first_msg; + ++m_cur_num_msg; + return *mp_index[m_cur_first_msg]; + } + else{ + size_type pos = where - &mp_index[0]; + size_type circ_pos = pos >= m_cur_first_msg ? pos - m_cur_first_msg : pos + (m_max_num_msg - m_cur_first_msg); + //Check if it's more efficient to move back or move front + if(circ_pos < m_cur_num_msg/2){ + //The queue can't be full so m_cur_num_msg == 0 or m_cur_num_msg <= pos + //indicates two step insertion + if(!pos){ + pos = m_max_num_msg; + where = &mp_index[m_max_num_msg-1]; + } + else{ + --where; + } + const bool unique_segment = m_cur_first_msg && m_cur_first_msg <= pos; + size_type first_segment_beg = unique_segment ? m_cur_first_msg : 1u; + size_type first_segment_end = pos; + size_type second_segment_beg = unique_segment || !m_cur_first_msg ? m_max_num_msg : m_cur_first_msg; + size_type second_segment_end = m_max_num_msg; + const msg_hdr_ptr_t backup = *(&mp_index[0] + (unique_segment ? first_segment_beg : second_segment_beg) - 1); + + //First segment + if(!unique_segment){ + std::copy( &mp_index[0] + second_segment_beg + , &mp_index[0] + second_segment_end + , &mp_index[0] + second_segment_beg - 1); + mp_index[m_max_num_msg-1] = mp_index[0]; + } + std::copy( &mp_index[0] + first_segment_beg + , &mp_index[0] + first_segment_end + , &mp_index[0] + first_segment_beg - 1); + *where = backup; + m_cur_first_msg = m_cur_first_msg ? m_cur_first_msg : m_max_num_msg; + --m_cur_first_msg; + ++m_cur_num_msg; + return **where; + } + else{ + //The queue can't be full so end_pos < m_cur_first_msg + //indicates two step insertion + const size_type end_pos = this->end_pos(); + const bool unique_segment = pos < end_pos; + size_type first_segment_beg = pos; + size_type first_segment_end = unique_segment ? end_pos : m_max_num_msg-1; + size_type second_segment_beg = 0u; + size_type second_segment_end = unique_segment ? 0u : end_pos; + const msg_hdr_ptr_t backup = *inserted_ptr_end; + + //First segment + if(!unique_segment){ + std::copy_backward( &mp_index[0] + second_segment_beg + , &mp_index[0] + second_segment_end + , &mp_index[0] + second_segment_end + 1); + mp_index[0] = mp_index[m_max_num_msg-1]; + } + std::copy_backward( &mp_index[0] + first_segment_beg + , &mp_index[0] + first_segment_end + , &mp_index[0] + first_segment_end + 1); + *where = backup; + ++m_cur_num_msg; + return **where; + } + } + } + + #else + + typedef msg_hdr_ptr_t *iterator; + + //!Returns the inserted message with top priority + msg_header &top_msg() + { return *mp_index[m_cur_num_msg-1]; } + + //!Returns the inserted message with bottom priority + msg_header &bottom_msg() + { return *mp_index[0]; } + + iterator inserted_ptr_begin() const + { return &mp_index[0]; } + + iterator inserted_ptr_end() const + { return &mp_index[m_cur_num_msg]; } + + iterator lower_bound(const msg_hdr_ptr_t & value, priority_functor func) + { return std::lower_bound(this->inserted_ptr_begin(), this->inserted_ptr_end(), value, func); } + + msg_header & insert_at(iterator pos) + { + const msg_hdr_ptr_t backup = *inserted_ptr_end(); + std::copy_backward(pos, inserted_ptr_end(), inserted_ptr_end()+1); + *pos = backup; + ++m_cur_num_msg; + return **pos; + } + + #endif //!Inserts the first free message in the priority queue - void queue_free_msg() - { - //Get free msg - msg_hdr_ptr_t free = mp_index[m_cur_num_msg]; + msg_header & queue_free_msg(unsigned int priority) + { //Get priority queue's range - msg_hdr_ptr_t *it = &mp_index[0], *it_end = &mp_index[m_cur_num_msg]; - //Check where the free message should be placed - it = std::lower_bound(it, it_end, free, static_cast&>(*this)); - //Make room in that position - std::copy_backward(it, it_end, it_end+1); + iterator it (inserted_ptr_begin()), it_end(inserted_ptr_end()); + //Optimize for non-priority usage + if(m_cur_num_msg && priority > this->bottom_msg().priority){ + //Check for higher priority than all stored messages + if(priority > this->top_msg().priority){ + it = it_end; + } + else{ + //Since we don't now which free message we will pick + //build a dummy header for searches + msg_header dummy_hdr; + dummy_hdr.priority = priority; + + //Get free msg + msg_hdr_ptr_t dummy_ptr(&dummy_hdr); + + //Check where the free message should be placed + it = this->lower_bound(dummy_ptr, static_cast&>(*this)); + } + + } //Insert the free message in the correct position - *it = free; - ++m_cur_num_msg; + return this->insert_at(it); } //!Returns the number of bytes needed to construct a message queue with @@ -322,7 +512,7 @@ class mq_hdr_t msg_hdr_align = ::boost::alignment_of::value, index_align = ::boost::alignment_of::value, r_hdr_size = ipcdetail::ct_rounded_size::value, - r_index_size = ipcdetail::get_rounded_size(sizeof(msg_hdr_ptr_t)*max_num_msg, msg_hdr_align), + r_index_size = ipcdetail::get_rounded_size(max_num_msg*sizeof(msg_hdr_ptr_t), msg_hdr_align), r_max_msg_size = ipcdetail::get_rounded_size(max_msg_size, msg_hdr_align) + sizeof(msg_header); return r_hdr_size + r_index_size + (max_num_msg*r_max_msg_size) + ipcdetail::managed_open_or_create_impl::ManagedOpenOrCreateUserOffset; @@ -336,7 +526,7 @@ class mq_hdr_t msg_hdr_align = ::boost::alignment_of::value, index_align = ::boost::alignment_of::value, r_hdr_size = ipcdetail::ct_rounded_size::value, - r_index_size = ipcdetail::get_rounded_size(sizeof(msg_hdr_ptr_t)*m_max_num_msg, msg_hdr_align), + r_index_size = ipcdetail::get_rounded_size(m_max_num_msg*sizeof(msg_hdr_ptr_t), msg_hdr_align), r_max_msg_size = ipcdetail::get_rounded_size(m_max_msg_size, msg_hdr_align) + sizeof(msg_header); //Pointer to the index @@ -345,7 +535,7 @@ class mq_hdr_t //Pointer to the first message header msg_header *msg_hdr = reinterpret_cast - (reinterpret_cast(this)+r_hdr_size+r_index_size); + (reinterpret_cast(this)+r_hdr_size+r_index_size); //Initialize the pointer to the index mp_index = index; @@ -373,6 +563,10 @@ class mq_hdr_t interprocess_condition m_cond_recv; //Condition block senders when the queue is full interprocess_condition m_cond_send; + #if defined(BOOST_INTERPROCESS_MSG_QUEUE_CIRCULAR_INDEX) + //Current start offset in the circular index + size_type m_cur_first_msg; + #endif }; @@ -403,7 +597,7 @@ class initialization_func_t new (mptr) mq_hdr_t(m_maxmsg, m_maxmsgsize); } BOOST_CATCH(...){ - return false; + return false; } BOOST_CATCH_END } @@ -433,7 +627,7 @@ inline message_queue_t::message_queue_t(create_only_t create_only, //Create shared memory and execute functor atomically : m_shmem(create_only, name, - get_mem_size(max_msg_size, max_num_msg), + get_mem_size(max_msg_size, max_num_msg), read_write, static_cast(0), //Prepare initialization functor @@ -503,13 +697,13 @@ inline bool message_queue_t::do_send(block_t block, throw interprocess_exception(size_error); } + bool was_empty = false; //--------------------------------------------- scoped_lock lock(p_hdr->m_mutex); //--------------------------------------------- { //If the queue is full execute blocking logic if (p_hdr->is_full()) { - switch(block){ case non_blocking : return false; @@ -536,30 +730,30 @@ inline bool message_queue_t::do_send(block_t block, break; } } - - //Get the first free message from free message queue - ipcdetail::msg_hdr_t *free_msg = p_hdr->free_msg(); - if (free_msg == 0) { - throw interprocess_exception("boost::interprocess::message_queue corrupted"); - } + + was_empty = p_hdr->is_empty(); + //Insert the first free message in the priority queue + ipcdetail::msg_hdr_t &free_msg_hdr = p_hdr->queue_free_msg(priority); + + //Sanity check, free msgs are always cleaned when received + assert(free_msg_hdr.priority == 0); + assert(free_msg_hdr.len == 0); //Copy control data to the free message - free_msg->priority = priority; - free_msg->len = buffer_size; + free_msg_hdr.priority = priority; + free_msg_hdr.len = buffer_size; //Copy user buffer to the message - std::memcpy(free_msg->data(), buffer, buffer_size); - -// bool was_empty = p_hdr->is_empty(); - //Insert the first free message in the priority queue - p_hdr->queue_free_msg(); - - //If this message changes the queue empty state, notify it to receivers -// if (was_empty){ - p_hdr->m_cond_recv.notify_one(); -// } + std::memcpy(free_msg_hdr.data(), buffer, buffer_size); } // Lock end + //Notify outside lock to avoid contention. This might produce some + //spurious wakeups, but it's usually far better than notifying inside. + //If this message changes the queue empty state, notify it to receivers + if (was_empty){ + p_hdr->m_cond_recv.notify_one(); + } + return true; } @@ -600,6 +794,7 @@ inline bool throw interprocess_exception(size_error); } + bool was_full = false; //--------------------------------------------- scoped_lock lock(p_hdr->m_mutex); //--------------------------------------------- @@ -635,51 +830,52 @@ inline bool } } - //Thre is at least message ready to pick, get the top one - ipcdetail::msg_hdr_t *top_msg = p_hdr->top_msg(); - - //Paranoia check - if (top_msg == 0) { - throw interprocess_exception("boost::interprocess::message_queue corrupted"); - } + //There is at least one message ready to pick, get the top one + ipcdetail::msg_hdr_t &top_msg = p_hdr->top_msg(); //Get data from the message - recvd_size = top_msg->len; - priority = top_msg->priority; + recvd_size = top_msg.len; + priority = top_msg.priority; + + //Some cleanup to ease debugging + top_msg.len = 0; + top_msg.priority = 0; //Copy data to receiver's bufers - std::memcpy(buffer, top_msg->data(), recvd_size); + std::memcpy(buffer, top_msg.data(), recvd_size); -// bool was_full = p_hdr->is_full(); + was_full = p_hdr->is_full(); //Free top message and put it in the free message list p_hdr->free_top_msg(); - - //If this reception changes the queue full state, notify senders -// if (was_full){ - p_hdr->m_cond_send.notify_one(); -// } } //Lock end + //Notify outside lock to avoid contention. This might produce some + //spurious wakeups, but it's usually far better than notifying inside. + //If this reception changes the queue full state, notify senders + if (was_full){ + p_hdr->m_cond_send.notify_one(); + } + return true; } template inline typename message_queue_t::size_type message_queue_t::get_max_msg() const -{ +{ ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); return p_hdr ? p_hdr->m_max_num_msg : 0; } template inline typename message_queue_t::size_type message_queue_t::get_max_msg_size() const -{ +{ ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); - return p_hdr ? p_hdr->m_max_msg_size : 0; + return p_hdr ? p_hdr->m_max_msg_size : 0; } template inline typename message_queue_t::size_type message_queue_t::get_num_msg() -{ +{ ipcdetail::mq_hdr_t *p_hdr = static_cast*>(m_shmem.get_user_address()); if(p_hdr){ //--------------------------------------------- @@ -688,7 +884,7 @@ inline typename message_queue_t::size_type message_queue_tm_cur_num_msg; } - return 0; + return 0; } template diff --git a/3party/boost/boost/interprocess/managed_external_buffer.hpp b/3party/boost/boost/interprocess/managed_external_buffer.hpp index e268e57601..1f4a1995f5 100644 --- a/3party/boost/boost/interprocess/managed_external_buffer.hpp +++ b/3party/boost/boost/interprocess/managed_external_buffer.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -23,7 +23,7 @@ #include //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include +#include #include #include @@ -50,7 +50,7 @@ class basic_managed_external_buffer base_t; BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_managed_external_buffer) /// @endcond - + public: typedef typename base_t::size_type size_type; diff --git a/3party/boost/boost/interprocess/managed_heap_memory.hpp b/3party/boost/boost/interprocess/managed_heap_memory.hpp index 87107855f2..868fdc5566 100644 --- a/3party/boost/boost/interprocess/managed_heap_memory.hpp +++ b/3party/boost/boost/interprocess/managed_heap_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -24,7 +24,7 @@ #include //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include +#include #include #include @@ -99,7 +99,7 @@ class basic_managed_heap_memory //!have some extra bytes to allocate new objects. If returns //!false, the heap allocation has failed. bool grow(size_type extra_bytes) - { + { //If memory is reallocated, data will //be automatically copied BOOST_TRY{ @@ -129,7 +129,7 @@ class basic_managed_heap_memory private: //!Frees resources. Never throws. void priv_close() - { + { base_t::destroy_impl(); std::vector().swap(m_heapmem); } diff --git a/3party/boost/boost/interprocess/managed_mapped_file.hpp b/3party/boost/boost/interprocess/managed_mapped_file.hpp index 5a351adfa5..eaf441ca02 100644 --- a/3party/boost/boost/interprocess/managed_mapped_file.hpp +++ b/3party/boost/boost/interprocess/managed_mapped_file.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -26,7 +26,7 @@ #include //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include +#include #include #include @@ -61,7 +61,7 @@ class basic_managed_mapped_file private: - typedef ipcdetail::create_open_func create_open_func_t; + typedef ipcdetail::create_open_func create_open_func_t; typedef ipcdetail::managed_open_or_create_impl< ipcdetail::file_wrapper , AllocationAlgorithm::Alignment> managed_open_or_create_type; diff --git a/3party/boost/boost/interprocess/managed_shared_memory.hpp b/3party/boost/boost/interprocess/managed_shared_memory.hpp index 0f74c1a0b9..d52986aebd 100644 --- a/3party/boost/boost/interprocess/managed_shared_memory.hpp +++ b/3party/boost/boost/interprocess/managed_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -25,7 +25,7 @@ #include //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include +#include #include namespace boost { diff --git a/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp b/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp index 414007a614..3d621b5b3e 100644 --- a/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp +++ b/3party/boost/boost/interprocess/managed_windows_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -25,7 +25,7 @@ #include //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include +#include #include #include diff --git a/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp b/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp index dc909f6824..a389c361b7 100644 --- a/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp +++ b/3party/boost/boost/interprocess/managed_xsi_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2008-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // @@ -28,7 +28,7 @@ #include //These includes needed to fulfill default template parameters of //predeclarations in interprocess_fwd.hpp -#include +#include #include #include diff --git a/3party/boost/boost/interprocess/mapped_region.hpp b/3party/boost/boost/interprocess/mapped_region.hpp index 522c1e403a..6c48c85478 100644 --- a/3party/boost/boost/interprocess/mapped_region.hpp +++ b/3party/boost/boost/interprocess/mapped_region.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -21,6 +21,18 @@ #include #include #include +//Some Unixes use caddr_t instead of void * in madvise +// SunOS Tru64 HP-UX AIX +#if defined(sun) || defined(__sun) || defined(__osf__) || defined(__osf) || defined(_hpux) || defined(hpux) || defined(_AIX) +#define BOOST_INTERPROCESS_MADVISE_USES_CADDR_T +#include +#endif + +//A lot of UNIXes have destructive semantics for MADV_DONTNEED, so +//we need to be careful to allow it. +#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) +#define BOOST_INTERPROCESS_MADV_DONTNEED_HAS_NONDESTRUCTIVE_SEMANTICS +#endif #if defined (BOOST_INTERPROCESS_WINDOWS) # include @@ -49,6 +61,13 @@ namespace boost { namespace interprocess { /// @cond + +//Solaris declares madvise only in some configurations but defines MADV_XXX, a bit confusing. +//Predeclare it here to avoid any compilation error +#if (defined(sun) || defined(__sun)) && defined(MADV_NORMAL) +extern "C" int madvise(caddr_t, size_t, int); +#endif + namespace ipcdetail{ class interprocess_tester; } namespace ipcdetail{ class raw_mapped_region_creator; } @@ -117,6 +136,10 @@ class mapped_region return *this; } + //!Swaps the mapped_region with another + //!mapped region + void swap(mapped_region &other); + //!Returns the size of the mapping. Never throws. std::size_t get_size() const; @@ -135,9 +158,41 @@ class mapped_region //!Never throws. Returns false if operation could not be performed. bool flush(std::size_t mapping_offset = 0, std::size_t numbytes = 0, bool async = true); - //!Swaps the mapped_region with another - //!mapped region - void swap(mapped_region &other); + //!Shrinks current mapped region. If after shrinking there is no longer need for a previously + //!mapped memory page, accessing that page can trigger a segmentation fault. + //!Depending on the OS, this operation might fail (XSI shared memory), it can decommit storage + //!and free a portion of the virtual address space (e.g.POSIX) or this + //!function can release some physical memory wihout freeing any virtual address space(Windows). + //!Returns true on success. Never throws. + bool shrink_by(std::size_t bytes, bool from_back = true); + + //!This enum specifies region usage behaviors that an application can specify + //!to the mapped region implementation. + enum advice_types{ + //!Specifies that the application has no advice to give on its behavior with respect to + //!the region. It is the default characteristic if no advice is given for a range of memory. + advice_normal, + //!Specifies that the application expects to access the region sequentially from + //!lower addresses to higher addresses. The implementation can lower the priority of + //!preceding pages within the region once a page have been accessed. + advice_sequential, + //!Specifies that the application expects to access the region in a random order, + //!and prefetching is likely not advantageous. + advice_random, + //!Specifies that the application expects to access the region in the near future. + //!The implementation can prefetch pages of the region. + advice_willneed, + //!Specifies that the application expects that it will not access the region in the near future. + //!The implementation can unload pages within the range to save system resources. + advice_dontneed + }; + + //!Advises the implementation on the expected behavior of the application with respect to the data + //!in the region. The implementation may use this information to optimize handling of the region data. + //!This function has no effect on the semantics of access to memory in the region, although it may affect + //!the performance of access. + //!If the advise type is not known to the implementation, the function returns false. True otherwise. + bool advise(advice_types advise); //!Returns the size of the page. This size is the minimum memory that //!will be used by the system when mapping a memory mappable source and @@ -152,6 +207,7 @@ class mapped_region void* priv_map_address() const; std::size_t priv_map_size() const; bool priv_flush_param_check(std::size_t mapping_offset, void *&addr, std::size_t &numbytes) const; + bool priv_shrink_param_check(std::size_t bytes, bool from_back, void *&shrink_page_start, std::size_t &shrink_page_bytes); static void priv_size_from_mapping_size (offset_t mapping_size, offset_t offset, offset_t page_offset, std::size_t &size); static offset_t priv_page_offset_addr_fixup(offset_t page_offset, const void *&addr); @@ -226,6 +282,38 @@ inline bool mapped_region::priv_flush_param_check return true; } +inline bool mapped_region::priv_shrink_param_check + (std::size_t bytes, bool from_back, void *&shrink_page_start, std::size_t &shrink_page_bytes) +{ + //Check some errors + if(m_base == 0 || bytes > m_size){ + return false; + } + else if(bytes == m_size){ + this->priv_close(); + return true; + } + else{ + const std::size_t page_size = mapped_region::get_page_size(); + if(from_back){ + const std::size_t new_pages = (m_size + m_page_offset - bytes - 1)/page_size + 1; + shrink_page_start = static_cast(this->priv_map_address()) + new_pages*page_size; + shrink_page_bytes = m_page_offset + m_size - new_pages*page_size; + m_size -= bytes; + } + else{ + shrink_page_start = this->priv_map_address(); + m_page_offset += bytes; + shrink_page_bytes = (m_page_offset/page_size)*page_size; + m_page_offset = m_page_offset % page_size; + m_size -= bytes; + m_base = static_cast(m_base) + bytes; + assert(shrink_page_bytes%page_size == 0); + } + return true; + } +} + inline void mapped_region::priv_size_from_mapping_size (offset_t mapping_size, offset_t offset, offset_t page_offset, std::size_t &size) { @@ -405,6 +493,37 @@ inline bool mapped_region::flush(std::size_t mapping_offset, std::size_t numbyte return true; } +inline bool mapped_region::shrink_by(std::size_t bytes, bool from_back) +{ + void *shrink_page_start; + std::size_t shrink_page_bytes; + if(!this->priv_shrink_param_check(bytes, from_back, shrink_page_start, shrink_page_bytes)){ + return false; + } + else if(shrink_page_bytes){ + //In Windows, we can't decommit the storage or release the virtual address space, + //the best we can do is try to remove some memory from the process working set. + //With a bit of luck we can free some physical memory. + unsigned long old_protect_ignored; + bool b_ret = winapi::virtual_unlock(shrink_page_start, shrink_page_bytes) + || (winapi::get_last_error() == winapi::error_not_locked); + (void)old_protect_ignored; + //Change page protection to forbid any further access + b_ret = b_ret && winapi::virtual_protect + (shrink_page_start, shrink_page_bytes, winapi::page_noaccess, old_protect_ignored); + return b_ret; + } + else{ + return true; + } +} + +inline bool mapped_region::advise(advice_types) +{ + //Windows has no madvise/posix_madvise equivalent + return false; +} + inline void mapped_region::priv_close() { if(m_base){ @@ -503,7 +622,13 @@ inline mapped_region::mapped_region //Create new mapping int prot = 0; - int flags = 0; + int flags = + #ifdef MAP_NOSYNC + //Avoid excessive syncing in BSD systems + MAP_NOSYNC; + #else + 0; + #endif switch(mode) { @@ -562,14 +687,107 @@ inline mapped_region::mapped_region } } +inline bool mapped_region::shrink_by(std::size_t bytes, bool from_back) +{ + void *shrink_page_start = 0; + std::size_t shrink_page_bytes = 0; + if(m_is_xsi || !this->priv_shrink_param_check(bytes, from_back, shrink_page_start, shrink_page_bytes)){ + return false; + } + else if(shrink_page_bytes){ + //In UNIX we can decommit and free virtual address space. + return 0 == munmap(shrink_page_start, shrink_page_bytes); + } + else{ + return true; + } +} + inline bool mapped_region::flush(std::size_t mapping_offset, std::size_t numbytes, bool async) { void *addr; - if(!this->priv_flush_param_check(mapping_offset, addr, numbytes)){ + if(m_is_xsi || !this->priv_flush_param_check(mapping_offset, addr, numbytes)){ return false; } //Flush it all - return msync( addr, numbytes, async ? MS_ASYNC : MS_SYNC) == 0; + return msync(addr, numbytes, async ? MS_ASYNC : MS_SYNC) == 0; +} + +inline bool mapped_region::advise(advice_types advice) +{ + int unix_advice = 0; + //Modes; 0: none, 2: posix, 1: madvise + const unsigned int mode_none = 0; + const unsigned int mode_padv = 1; + const unsigned int mode_madv = 2; + unsigned int mode = mode_none; + //Choose advice either from POSIX (preferred) or native Unix + switch(advice){ + case advice_normal: + #if defined(POSIX_MADV_NORMAL) + unix_advice = POSIX_MADV_NORMAL; + mode = mode_padv; + #elif defined(MADV_NORMAL) + unix_advice = MADV_NORMAL; + mode = mode_madv; + #endif + break; + case advice_sequential: + #if defined(POSIX_MADV_SEQUENTIAL) + unix_advice = POSIX_MADV_SEQUENTIAL; + mode = mode_padv; + #elif defined(MADV_SEQUENTIAL) + unix_advice = MADV_SEQUENTIAL; + mode = mode_madv; + #endif + break; + case advice_random: + #if defined(POSIX_MADV_RANDOM) + unix_advice = POSIX_MADV_RANDOM; + mode = mode_padv; + #elif defined(MADV_RANDOM) + unix_advice = MADV_RANDOM; + mode = mode_madv; + #endif + break; + case advice_willneed: + #if defined(POSIX_MADV_WILLNEED) + unix_advice = POSIX_MADV_WILLNEED; + mode = mode_padv; + #elif defined(MADV_WILLNEED) + unix_advice = MADV_WILLNEED; + mode = mode_madv; + #endif + break; + case advice_dontneed: + #if defined(POSIX_MADV_DONTNEED) + unix_advice = POSIX_MADV_DONTNEED; + mode = mode_padv; + #elif defined(MADV_DONTNEED) && defined(BOOST_INTERPROCESS_MADV_DONTNEED_HAS_NONDESTRUCTIVE_SEMANTICS) + unix_advice = MADV_DONTNEED; + mode = mode_madv; + #endif + break; + default: + return false; + } + switch(mode){ + #if defined(POSIX_MADV_NORMAL) + case mode_padv: + return 0 == posix_madvise(this->priv_map_address(), this->priv_map_size(), unix_advice); + #endif + #if defined(MADV_NORMAL) + case mode_madv: + return 0 == madvise( + #if defined(BOOST_INTERPROCESS_MADVISE_USES_CADDR_T) + (caddr_t) + #endif + this->priv_map_address(), this->priv_map_size(), unix_advice); + #endif + default: + return false; + + } } inline void mapped_region::priv_close() diff --git a/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp b/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp index 91d798145b..203686b8fa 100644 --- a/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp +++ b/3party/boost/boost/interprocess/mem_algo/detail/mem_algo_common.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -40,6 +41,37 @@ namespace boost { namespace interprocess { namespace ipcdetail { +template +class basic_multiallocation_chain + : public boost::container::container_detail:: + basic_multiallocation_chain +{ + BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_multiallocation_chain) + typedef boost::container::container_detail:: + basic_multiallocation_chain base_t; + public: + + basic_multiallocation_chain() + : base_t() + {} + + basic_multiallocation_chain(BOOST_RV_REF(basic_multiallocation_chain) other) + : base_t(::boost::move(static_cast(other))) + {} + + basic_multiallocation_chain& operator=(BOOST_RV_REF(basic_multiallocation_chain) other) + { + this->base_t::operator=(::boost::move(static_cast(other))); + return *this; + } + + void *pop_front() + { + return boost::interprocess::ipcdetail::to_raw_pointer(this->base_t::pop_front()); + } +}; + + //!This class implements several allocation functions shared by different algorithms //!(aligned allocation, multiple allocation...). template @@ -199,7 +231,7 @@ class memory_algorithm_common static void* allocate_aligned (MemoryAlgorithm *memory_algo, size_type nbytes, size_type alignment) { - + //Ensure power of 2 if ((alignment & (alignment - size_type(1u))) != 0){ //Alignment is not power of two @@ -215,7 +247,7 @@ class memory_algorithm_common if(nbytes > UsableByPreviousChunk) nbytes -= UsableByPreviousChunk; - + //We can find a aligned portion if we allocate a block that has alignment //nbytes + alignment bytes or more. size_type minimum_allocation = max_value @@ -436,101 +468,108 @@ class memory_algorithm_common } else{ for(size_type i = 0; i < n_elements; ++i){ + if(multiplication_overflows(elem_sizes[i], sizeof_element)){ + total_request_units = 0; + break; + } elem_units = memory_algo->priv_get_total_units(elem_sizes[i]*sizeof_element); elem_units = ptr_size_units > elem_units ? ptr_size_units : elem_units; + if(sum_overflows(total_request_units, elem_units)){ + total_request_units = 0; + break; + } total_request_units += elem_units; } } multiallocation_chain chain; + if(total_request_units && !multiplication_overflows(total_request_units, Alignment)){ + size_type low_idx = 0; + while(low_idx < n_elements){ + size_type total_bytes = total_request_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; + size_type min_allocation = (!sizeof_element) + ? elem_units + : memory_algo->priv_get_total_units(elem_sizes[low_idx]*sizeof_element); + min_allocation = min_allocation*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; - size_type low_idx = 0; - while(low_idx < n_elements){ - size_type total_bytes = total_request_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; - size_type min_allocation = (!sizeof_element) - ? elem_units - : memory_algo->priv_get_total_units(elem_sizes[low_idx]*sizeof_element); - min_allocation = min_allocation*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; - - size_type received_size; - std::pair ret = memory_algo->priv_allocate - (boost::interprocess::allocate_new, min_allocation, total_bytes, received_size, 0); - if(!ret.first){ - break; - } - - block_ctrl *block = memory_algo->priv_get_block(ret.first); - size_type received_units = (size_type)block->m_size; - char *block_address = reinterpret_cast(block); - - size_type total_used_units = 0; -// block_ctrl *prev_block = 0; - while(total_used_units < received_units){ - if(sizeof_element){ - elem_units = memory_algo->priv_get_total_units(elem_sizes[low_idx]*sizeof_element); - elem_units = ptr_size_units > elem_units ? ptr_size_units : elem_units; - } - if(total_used_units + elem_units > received_units) + size_type received_size; + std::pair ret = memory_algo->priv_allocate + (boost::interprocess::allocate_new, min_allocation, total_bytes, received_size, 0); + if(!ret.first){ break; - total_request_units -= elem_units; - //This is the position where the new block must be created - block_ctrl *new_block = reinterpret_cast(block_address); - assert_alignment(new_block); + } - //The last block should take all the remaining space - if((low_idx + 1) == n_elements || - (total_used_units + elem_units + - ((!sizeof_element) - ? elem_units - : std::max(memory_algo->priv_get_total_units(elem_sizes[low_idx+1]*sizeof_element), ptr_size_units)) - ) > received_units){ - //By default, the new block will use the rest of the buffer - new_block->m_size = received_units - total_used_units; - memory_algo->priv_mark_new_allocated_block(new_block); + block_ctrl *block = memory_algo->priv_get_block(ret.first); + size_type received_units = (size_type)block->m_size; + char *block_address = reinterpret_cast(block); - //If the remaining units are bigger than needed and we can - //split it obtaining a new free memory block do it. - if((received_units - total_used_units) >= (elem_units + MemoryAlgorithm::BlockCtrlUnits)){ - size_type shrunk_received; - size_type shrunk_request = elem_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; - bool shrink_ok = shrink - (memory_algo - ,memory_algo->priv_get_user_buffer(new_block) - ,shrunk_request - ,shrunk_request - ,shrunk_received); - (void)shrink_ok; - //Shrink must always succeed with passed parameters - BOOST_ASSERT(shrink_ok); - //Some sanity checks - BOOST_ASSERT(shrunk_request == shrunk_received); - BOOST_ASSERT(elem_units == ((shrunk_request-UsableByPreviousChunk)/Alignment + AllocatedCtrlUnits)); - //"new_block->m_size" must have been reduced to elem_units by "shrink" - BOOST_ASSERT(new_block->m_size == elem_units); - //Now update the total received units with the reduction - received_units = elem_units + total_used_units; + size_type total_used_units = 0; + while(total_used_units < received_units){ + if(sizeof_element){ + elem_units = memory_algo->priv_get_total_units(elem_sizes[low_idx]*sizeof_element); + elem_units = ptr_size_units > elem_units ? ptr_size_units : elem_units; } - } - else{ - new_block->m_size = elem_units; - memory_algo->priv_mark_new_allocated_block(new_block); - } + if(total_used_units + elem_units > received_units) + break; + total_request_units -= elem_units; + //This is the position where the new block must be created + block_ctrl *new_block = reinterpret_cast(block_address); + assert_alignment(new_block); - block_address += new_block->m_size*Alignment; - total_used_units += (size_type)new_block->m_size; - //Check we have enough room to overwrite the intrusive pointer - BOOST_ASSERT((new_block->m_size*Alignment - AllocatedCtrlUnits) >= sizeof(void_pointer)); - void_pointer p = new(memory_algo->priv_get_user_buffer(new_block))void_pointer(0); - chain.push_back(p); - ++low_idx; - //prev_block = new_block; + //The last block should take all the remaining space + if((low_idx + 1) == n_elements || + (total_used_units + elem_units + + ((!sizeof_element) + ? elem_units + : std::max(memory_algo->priv_get_total_units(elem_sizes[low_idx+1]*sizeof_element), ptr_size_units)) + ) > received_units){ + //By default, the new block will use the rest of the buffer + new_block->m_size = received_units - total_used_units; + memory_algo->priv_mark_new_allocated_block(new_block); + + //If the remaining units are bigger than needed and we can + //split it obtaining a new free memory block do it. + if((received_units - total_used_units) >= (elem_units + MemoryAlgorithm::BlockCtrlUnits)){ + size_type shrunk_received; + size_type shrunk_request = elem_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk; + bool shrink_ok = shrink + (memory_algo + ,memory_algo->priv_get_user_buffer(new_block) + ,shrunk_request + ,shrunk_request + ,shrunk_received); + (void)shrink_ok; + //Shrink must always succeed with passed parameters + BOOST_ASSERT(shrink_ok); + //Some sanity checks + BOOST_ASSERT(shrunk_request == shrunk_received); + BOOST_ASSERT(elem_units == ((shrunk_request-UsableByPreviousChunk)/Alignment + AllocatedCtrlUnits)); + //"new_block->m_size" must have been reduced to elem_units by "shrink" + BOOST_ASSERT(new_block->m_size == elem_units); + //Now update the total received units with the reduction + received_units = elem_units + total_used_units; + } + } + else{ + new_block->m_size = elem_units; + memory_algo->priv_mark_new_allocated_block(new_block); + } + + block_address += new_block->m_size*Alignment; + total_used_units += (size_type)new_block->m_size; + //Check we have enough room to overwrite the intrusive pointer + BOOST_ASSERT((new_block->m_size*Alignment - AllocatedCtrlUnits) >= sizeof(void_pointer)); + void_pointer p = new(memory_algo->priv_get_user_buffer(new_block))void_pointer(0); + chain.push_back(p); + ++low_idx; + } + //Sanity check + BOOST_ASSERT(total_used_units == received_units); + } + + if(low_idx != n_elements){ + priv_deallocate_many(memory_algo, boost::move(chain)); } - //Sanity check - BOOST_ASSERT(total_used_units == received_units); - } - - if(low_idx != n_elements){ - priv_deallocate_many(memory_algo, boost::move(chain)); } return boost::move(chain); } @@ -538,9 +577,7 @@ class memory_algorithm_common static void priv_deallocate_many(MemoryAlgorithm *memory_algo, multiallocation_chain chain) { while(!chain.empty()){ - void *addr = to_raw_pointer(chain.front()); - chain.pop_front(); - memory_algo->priv_deallocate(addr); + memory_algo->priv_deallocate(to_raw_pointer(chain.pop_front())); } } }; diff --git a/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp b/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp index c36916b72f..51fc557975 100644 --- a/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp +++ b/3party/boost/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -60,7 +60,7 @@ class simple_seq_fit_impl simple_seq_fit_impl(); simple_seq_fit_impl(const simple_seq_fit_impl &); simple_seq_fit_impl &operator=(const simple_seq_fit_impl &); - + typedef typename boost::intrusive:: pointer_traits::template rebind_pointer::type char_ptr; @@ -96,7 +96,7 @@ class simple_seq_fit_impl //!This block's memory size (including block_ctrl //!header) in BasicSize units size_type m_size; - + size_type get_user_bytes() const { return this->m_size*Alignment - BlockCtrlBytes; } @@ -426,7 +426,7 @@ void simple_seq_fit_impl::shrink_to_fit() (void)addr; BOOST_ASSERT(addr); BOOST_ASSERT(received_size == last_units*Alignment - AllocatedCtrlBytes); - + //Shrink it m_header.m_size /= Alignment; m_header.m_size -= last->m_size; @@ -463,7 +463,7 @@ void *simple_seq_fit_impl:: template inline void simple_seq_fit_impl::priv_add_segment(void *addr, size_type size) -{ +{ algo_impl_t::assert_alignment(addr); //Check size BOOST_ASSERT(!(size < MinBlockSize)); @@ -523,7 +523,7 @@ inline void simple_seq_fit_impl::zero_free_memory() //Iterate through all free portions do{ - //Just clear user the memory part reserved for the user + //Just clear user the memory part reserved for the user std::memset( priv_get_user_buffer(block) , 0 , block->get_user_bytes()); @@ -583,7 +583,7 @@ inline void* simple_seq_fit_impl:: template inline void* simple_seq_fit_impl:: allocate_aligned(size_type nbytes, size_type alignment) -{ +{ //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- @@ -698,7 +698,7 @@ void* simple_seq_fit_impl:: size_type needs_backwards = ipcdetail::get_rounded_size(preferred_size - extra_forward, Alignment); - + if(!only_preferred_backwards){ max_value(ipcdetail::get_rounded_size(min_size - extra_forward, Alignment) ,min_value(prev->get_user_bytes(), needs_backwards)); @@ -710,7 +710,7 @@ void* simple_seq_fit_impl:: if(!priv_expand(reuse_ptr, received_size, received_size, received_size)){ BOOST_ASSERT(0); } - + //We need a minimum size to split the previous one if((prev->get_user_bytes() - needs_backwards) > 2*BlockCtrlBytes){ block_ctrl *new_block = reinterpret_cast @@ -750,9 +750,7 @@ inline void simple_seq_fit_impl:: boost::interprocess::scoped_lock guard(m_header); //----------------------- while(!chain.empty()){ - void *addr = chain.front(); - chain.pop_front(); - this->priv_deallocate(addr); + this->priv_deallocate(to_raw_pointer(chain.pop_front())); } } @@ -969,7 +967,7 @@ inline bool simple_seq_fit_impl:: //We can fill expand. Merge both blocks, block->m_next = next_block->m_next; block->m_size = merged_size; - + //Find the previous free block of next_block block_ctrl *prev = &m_header.m_root; while(ipcdetail::to_raw_pointer(prev->m_next) != next_block){ @@ -978,7 +976,7 @@ inline bool simple_seq_fit_impl:: //Now insert merged block in the free list //This allows reusing allocation logic in this function - m_header.m_allocated -= old_block_size*Alignment; + m_header.m_allocated -= old_block_size*Alignment; prev->m_next = block; //Now use check and allocate to do the allocation logic @@ -992,7 +990,7 @@ inline bool simple_seq_fit_impl:: BOOST_ASSERT(0); return false; } - return true; + return true; } template inline @@ -1071,9 +1069,9 @@ void simple_seq_fit_impl::priv_deallocate(void* addr) size_type total_size = Alignment*block->m_size; BOOST_ASSERT(m_header.m_allocated >= total_size); - + //Update used memory count - m_header.m_allocated -= total_size; + m_header.m_allocated -= total_size; //Let's find the previous and the next block of the block to deallocate //This ordering comparison must be done with original pointers diff --git a/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp b/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp index 7ccc642e29..f864114e81 100644 --- a/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp +++ b/3party/boost/boost/interprocess/mem_algo/rbtree_best_fit.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -88,8 +88,7 @@ class rbtree_best_fit typedef MutexFamily mutex_family; //!Pointer type to be used with the rest of the Interprocess framework typedef VoidPointer void_pointer; - typedef boost::container::container_detail:: - basic_multiallocation_chain multiallocation_chain; + typedef ipcdetail::basic_multiallocation_chain multiallocation_chain; typedef typename boost::intrusive::pointer_traits::difference_type difference_type; typedef typename boost::make_unsigned::type size_type; @@ -132,7 +131,7 @@ class rbtree_best_fit { return size < block.m_size; } bool operator()(const block_ctrl &block, size_type size) const - { return block.m_size < size; } + { return block.m_size < size; } }; //!Shared mutex to protect memory allocate/deallocate @@ -157,7 +156,7 @@ class rbtree_best_fit } m_header; friend class ipcdetail::memory_algorithm_common; - + typedef ipcdetail::memory_algorithm_common algo_impl_t; public: @@ -339,7 +338,7 @@ class rbtree_best_fit void priv_add_segment(void *addr, size_type size); public: - + static const size_type Alignment = !MemAlignment ? size_type(::boost::alignment_of< ::boost::detail::max_align>::value) : size_type(MemAlignment) @@ -386,7 +385,7 @@ inline typename rbtree_best_fit::size_ty template void rbtree_best_fit:: priv_add_segment(void *addr, size_type size) -{ +{ //Check alignment algo_impl_t::check_alignment(addr); //Check size @@ -570,7 +569,7 @@ void rbtree_best_fit::shrink_to_fit() size_type shrunk_border_offset = (size_type)(reinterpret_cast(last_block) - reinterpret_cast(this)) + EndCtrlBlockBytes; - + block_ctrl *new_end_block = last_block; algo_impl_t::assert_alignment(new_end_block); @@ -672,7 +671,7 @@ bool rbtree_best_fit:: template inline void* rbtree_best_fit:: allocate(size_type nbytes) -{ +{ //----------------------- boost::interprocess::scoped_lock guard(m_header); //----------------------- @@ -884,7 +883,7 @@ void* rbtree_best_fit:: received_size = needs_backwards_aligned + received_size; m_header.m_allocated += needs_backwards_aligned; - + //Check alignment algo_impl_t::assert_alignment(new_block); @@ -1044,7 +1043,7 @@ bool rbtree_best_fit:: //The block must be marked as allocated and the sizes must be equal BOOST_ASSERT(priv_is_allocated_block(block)); //BOOST_ASSERT(old_block_units == priv_tail_size(block)); - + //Put this to a safe value received_size = (old_block_units - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk; if(received_size >= preferred_size || received_size >= min_size) @@ -1298,7 +1297,7 @@ void* rbtree_best_fit::priv_check_and_al m_header.m_imultiset.erase(it_old); m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *rem_block); } - + } else if (block->m_size >= nunits){ m_header.m_imultiset.erase(it_old); @@ -1318,7 +1317,7 @@ void* rbtree_best_fit::priv_check_and_al //Clear the memory occupied by the tree hook, since this won't be //cleared with zero_free_memory TreeHook *t = static_cast(block); - //Just clear the memory part reserved for the user + //Just clear the memory part reserved for the user std::size_t tree_hook_offset_in_block = (char*)t - (char*)block; //volatile char *ptr = char *ptr = reinterpret_cast(block)+tree_hook_offset_in_block; @@ -1344,7 +1343,7 @@ void rbtree_best_fit::priv_deallocate(vo if(!addr) return; block_ctrl *block = priv_get_block(addr); - + //The blocks must be marked as allocated and the sizes must be equal BOOST_ASSERT(priv_is_allocated_block(block)); // BOOST_ASSERT(block->m_size == priv_tail_size(block)); diff --git a/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp b/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp index 1085ca00ac..601c57b83e 100644 --- a/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp +++ b/3party/boost/boost/interprocess/mem_algo/simple_seq_fit.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/offset_ptr.hpp b/3party/boost/boost/interprocess/offset_ptr.hpp index ac8da2c292..752c435862 100644 --- a/3party/boost/boost/interprocess/offset_ptr.hpp +++ b/3party/boost/boost/interprocess/offset_ptr.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -44,6 +44,175 @@ struct has_trivial_destructor; namespace interprocess { +/// @cond +namespace ipcdetail { + + template + union offset_ptr_internal + { + explicit offset_ptr_internal(OffsetType off) + : m_offset(off) + {} + OffsetType m_offset; //Distance between this object and pointee address + typename ::boost::aligned_storage + < sizeof(OffsetType) + , (OffsetAlignment == offset_type_alignment) ? + ::boost::alignment_of::value : OffsetAlignment + >::type alignment_helper; + }; + + //Note: using the address of a local variable to point to another address + //is not standard conforming and this can be optimized-away by the compiler. + //Non-inlining is a method to remain illegal but correct + + //Undef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_XXX if your compiler can inline + //this code without breaking the library + + //////////////////////////////////////////////////////////////////////// + // + // offset_ptr_to_raw_pointer + // + //////////////////////////////////////////////////////////////////////// + #define BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_PTR + #define BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_PTR + + template + #ifndef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_PTR + BOOST_INTERPROCESS_NEVER_INLINE + #elif defined(NDEBUG) + inline + #endif + void * offset_ptr_to_raw_pointer(const volatile void *this_ptr, std::size_t offset) + { + typedef pointer_size_t_caster caster_t; + #ifndef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_PTR + if(offset == 1){ + return 0; + } + else{ + caster_t caster((void*)this_ptr); + return caster_t(caster.size() + offset).pointer(); + } + #else + caster_t caster((void*)this_ptr); + return caster_t((caster.size() + offset) & -std::size_t(offset != 1)).pointer(); + #endif + } + + #ifdef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_PTR + #undef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_PTR + #endif + #ifdef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_PTR + #undef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_PTR + #endif + + //////////////////////////////////////////////////////////////////////// + // + // offset_ptr_to_offset + // + //////////////////////////////////////////////////////////////////////// + #define BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF + //Branchless seems slower in x86 + //#define BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF + + template + #ifndef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF + BOOST_INTERPROCESS_NEVER_INLINE + #elif defined(NDEBUG) + inline + #endif + std::size_t offset_ptr_to_offset(const volatile void *ptr, const volatile void *this_ptr) + { + typedef pointer_size_t_caster caster_t; + #ifndef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF + //offset == 1 && ptr != 0 is not legal for this pointer + if(!ptr){ + return 1; + } + else{ + caster_t this_caster((void*)this_ptr); + caster_t ptr_caster((void*)ptr); + std::size_t offset = ptr_caster.size() - this_caster.size(); + BOOST_ASSERT(offset != 1); + return offset; + } + #else + caster_t this_caster((void*)this_ptr); + caster_t ptr_caster((void*)ptr); + std::size_t offset = (ptr_caster.size() - this_caster.size() - 1) & -std::size_t(ptr != 0); + ++offset; + return offset; + #endif + } + + #ifdef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF + #undef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF + #endif + #ifdef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF + #undef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF + #endif + + //////////////////////////////////////////////////////////////////////// + // + // offset_ptr_to_offset_from_other + // + //////////////////////////////////////////////////////////////////////// + #define BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF_FROM_OTHER + //Branchless seems slower in x86 + //#define BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF_FROM_OTHER + + template + #ifndef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF_FROM_OTHER + BOOST_INTERPROCESS_NEVER_INLINE + #elif defined(NDEBUG) + inline + #endif + std::size_t offset_ptr_to_offset_from_other + (const volatile void *this_ptr, const volatile void *other_ptr, std::size_t other_offset) + { + typedef pointer_size_t_caster caster_t; + #ifndef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF_FROM_OTHER + if(other_offset == 1){ + return 1; + } + else{ + caster_t this_caster((void*)this_ptr); + caster_t other_caster((void*)other_ptr); + std::size_t offset = other_caster.size() - this_caster.size() + other_offset; + BOOST_ASSERT(offset != 1); + return offset; + } + #else + caster_t this_caster((void*)this_ptr); + caster_t other_caster((void*)other_ptr); + std::size_t offset = (other_caster.size() - this_caster.size()) & -std::size_t(other_offset != 1); + offset += other_offset; + return offset; + #endif + } + + #ifdef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF_FROM_OTHER + #undef BOOST_INTERPROCESS_OFFSET_PTR_INLINE_TO_OFF_FROM_OTHER + #endif + #ifdef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF_FROM_OTHER + #undef BOOST_INTERPROCESS_OFFSET_PTR_BRANCHLESS_TO_OFF_FROM_OTHER + #endif + + //////////////////////////////////////////////////////////////////////// + // + // Let's assume cast to void and cv cast don't change any target address + // + //////////////////////////////////////////////////////////////////////// + template + struct offset_ptr_maintains_address + { + static const bool value = ipcdetail::is_cv_same::value + || ipcdetail::is_cv_same::value; + }; + +} //namespace ipcdetail { +/// @endcond + //!A smart pointer that stores the offset between between the pointer and the //!the object it points. This allows offset allows special properties, since //!the pointer is independent from the address address of the pointee, if the @@ -74,69 +243,111 @@ class offset_ptr public: //Public Functions + //!Default constructor (null pointer). + //!Never throws. + offset_ptr() + : internal(1) + {} + //!Constructor from raw pointer (allows "0" pointer conversion). //!Never throws. - offset_ptr(pointer ptr = 0) { this->set_offset(ptr); } + offset_ptr(pointer ptr) + : internal(static_cast(ipcdetail::offset_ptr_to_offset<0>(ptr, this))) + {} //!Constructor from other pointer. //!Never throws. template offset_ptr( T *ptr , typename ipcdetail::enable_if< ipcdetail::is_convertible >::type * = 0) - { this->set_offset(static_cast(ptr)); } + : internal(static_cast + (ipcdetail::offset_ptr_to_offset<0>(static_cast(ptr), this))) + {} //!Constructor from other offset_ptr //!Never throws. offset_ptr(const offset_ptr& ptr) - { this->set_offset(ptr.get()); } + : internal(static_cast + (ipcdetail::offset_ptr_to_offset_from_other<0>(this, &ptr, ptr.internal.m_offset))) + {} //!Constructor from other offset_ptr. If pointers of pointee types are //!convertible, offset_ptrs will be convertibles. Never throws. - template - offset_ptr( const offset_ptr &ptr - , typename ipcdetail::enable_if< ipcdetail::is_convertible >::type * = 0) - { this->set_offset(static_cast(ptr.get())); } + template + offset_ptr( const offset_ptr &ptr + #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED + , typename ipcdetail::enable_if_c< ipcdetail::is_convertible::value + && ipcdetail::offset_ptr_maintains_address::value + >::type * = 0 + #endif + ) + : internal(static_cast + (ipcdetail::offset_ptr_to_offset_from_other<0>(this, &ptr, ptr.get_offset()))) + {} + + #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED + + //!Constructor from other offset_ptr. If pointers of pointee types are + //!convertible, offset_ptrs will be convertibles. Never throws. + template + offset_ptr( const offset_ptr &ptr + , typename ipcdetail::enable_if_c< ipcdetail::is_convertible::value + && !ipcdetail::offset_ptr_maintains_address::value + >::type * = 0) + : internal(static_cast + (ipcdetail::offset_ptr_to_offset<0>(static_cast(ptr.get()), this))) + {} + + #endif //!Emulates static_cast operator. //!Never throws. template offset_ptr(const offset_ptr & r, ipcdetail::static_cast_tag) - { this->set_offset(static_cast(r.get())); } + : internal(static_cast + (ipcdetail::offset_ptr_to_offset<0>(static_cast(r.get()), this))) + {} //!Emulates const_cast operator. //!Never throws. template offset_ptr(const offset_ptr & r, ipcdetail::const_cast_tag) - { this->set_offset(const_cast(r.get())); } + : internal(static_cast + (ipcdetail::offset_ptr_to_offset<0>(const_cast(r.get()), this))) + {} //!Emulates dynamic_cast operator. //!Never throws. template offset_ptr(const offset_ptr & r, ipcdetail::dynamic_cast_tag) - { this->set_offset(dynamic_cast(r.get())); } + : internal(static_cast + (ipcdetail::offset_ptr_to_offset<0>(dynamic_cast(r.get()), this))) + {} //!Emulates reinterpret_cast operator. //!Never throws. template offset_ptr(const offset_ptr & r, ipcdetail::reinterpret_cast_tag) - { this->set_offset(reinterpret_cast(r.get())); } + : internal(static_cast + (ipcdetail::offset_ptr_to_offset<0>(reinterpret_cast(r.get()), this))) + {} //!Obtains raw pointer from offset. //!Never throws. - pointer get()const - { return this->to_raw_pointer(); } + pointer get() const + { return (pointer)ipcdetail::offset_ptr_to_raw_pointer<0>(this, this->internal.m_offset); } offset_type get_offset() const - { return internal.m_offset; } + { return this->internal.m_offset; } //!Pointer-like -> operator. It can return 0 pointer. //!Never throws. - pointer operator->() const + pointer operator->() const { return this->get(); } //!Dereferencing operator, if it is a null offset_ptr behavior //! is undefined. Never throws. - reference operator* () const + reference operator* () const { pointer p = this->get(); reference r = *p; @@ -145,26 +356,56 @@ class offset_ptr //!Indexing operator. //!Never throws. - template - reference operator[](T idx) const + reference operator[](difference_type idx) const { return this->get()[idx]; } //!Assignment from pointer (saves extra conversion). //!Never throws. offset_ptr& operator= (pointer from) - { this->set_offset(from); return *this; } + { + this->internal.m_offset = + static_cast(ipcdetail::offset_ptr_to_offset<0>(from, this)); + return *this; + } //!Assignment from other offset_ptr. //!Never throws. - offset_ptr& operator= (const offset_ptr & pt) - { pointer p(pt.get()); (void)p; this->set_offset(p); return *this; } + offset_ptr& operator= (const offset_ptr & ptr) + { + this->internal.m_offset = + static_cast(ipcdetail::offset_ptr_to_offset_from_other<0>(this, &ptr, ptr.internal.m_offset)); + return *this; + } //!Assignment from related offset_ptr. If pointers of pointee types //! are assignable, offset_ptrs will be assignable. Never throws. - template - typename ipcdetail::enable_if, offset_ptr&>::type - operator= (const offset_ptr & ptr) - { this->set_offset(static_cast(ptr.get())); return *this; } + template + #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED + typename ipcdetail::enable_if_c< ipcdetail::is_convertible::value + && ipcdetail::offset_ptr_maintains_address::value + , offset_ptr&>::type + #else + offset_ptr& + #endif + operator= (const offset_ptr &ptr) + { + this->internal.m_offset = + static_cast(ipcdetail::offset_ptr_to_offset_from_other<0>(this, &ptr, ptr.get_offset())); + return *this; + } + + #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED + template + typename ipcdetail::enable_if_c::value + && !ipcdetail::offset_ptr_maintains_address::value + , offset_ptr&>::type + operator= (const offset_ptr &ptr) + { + this->internal.m_offset = + static_cast(ipcdetail::offset_ptr_to_offset<0>(static_cast(ptr.get()), this)); + return *this; + } + #endif //!offset_ptr += difference_type. //!Never throws. @@ -173,8 +414,7 @@ class offset_ptr //!offset_ptr -= difference_type. //!Never throws. - template - offset_ptr &operator-= (T offset) + offset_ptr &operator-= (difference_type offset) { this->dec_offset(offset * sizeof (PointedType)); return *this; } //!++offset_ptr. @@ -185,7 +425,11 @@ class offset_ptr //!offset_ptr++. //!Never throws. offset_ptr operator++ (int) - { offset_ptr temp(*this); ++*this; return temp; } + { + offset_ptr tmp(*this); + this->inc_offset(sizeof (PointedType)); + return tmp; + } //!--offset_ptr. //!Never throws. @@ -195,17 +439,21 @@ class offset_ptr //!offset_ptr--. //!Never throws. offset_ptr operator-- (int) - { offset_ptr temp(*this); --*this; return temp; } + { + offset_ptr tmp(*this); + this->dec_offset(sizeof (PointedType)); + return tmp; + } //!safe bool conversion operator. //!Never throws. - operator unspecified_bool_type() const - { return this->get()? &self_t::unspecified_bool_type_func : 0; } + operator unspecified_bool_type() const + { return this->internal.m_offset != 1? &self_t::unspecified_bool_type_func : 0; } //!Not operator. Not needed in theory, but improves portability. //!Never throws bool operator! () const - { return this->get() == 0; } + { return this->internal.m_offset == 1; } //!Compatibility with pointer_traits //! @@ -220,23 +468,23 @@ class offset_ptr //!difference_type + offset_ptr //!operation - friend offset_ptr operator+(difference_type diff, const offset_ptr& right) - { offset_ptr tmp(right); tmp += diff; return tmp; } + friend offset_ptr operator+(difference_type diff, offset_ptr right) + { right += diff; return right; } //!offset_ptr + difference_type //!operation - friend offset_ptr operator+(const offset_ptr& left, difference_type diff) - { offset_ptr tmp(left); tmp += diff; return tmp; } + friend offset_ptr operator+(offset_ptr left, difference_type diff) + { left += diff; return left; } //!offset_ptr - diff //!operation - friend offset_ptr operator-(const offset_ptr &left, difference_type diff) - { offset_ptr tmp(left); tmp -= diff; return tmp; } + friend offset_ptr operator-(offset_ptr left, difference_type diff) + { left -= diff; return left; } //!offset_ptr - diff //!operation - friend offset_ptr operator-(difference_type diff, const offset_ptr &right) - { offset_ptr tmp(right); tmp -= diff; return tmp; } + friend offset_ptr operator-(difference_type diff, offset_ptr right) + { right -= diff; return right; } //!offset_ptr - offset_ptr //!operation @@ -309,63 +557,13 @@ class offset_ptr private: /// @cond - - //Note: using the address of a local variable to point to another address - //is not standard conforming and this can be optimized-away by the compiler. - //Non-inlining is a method to remain illegal and correct - #if defined(_MSC_VER) - __declspec(noinline) //this workaround is needed for MSVC compilers - #elif defined (__GNUC__)//this workaround is needed for GCC - __attribute__((__noinline__)) - #endif - void set_offset(const PointedType *ptr) - { - #if defined (__GNUC__) - //asm(""); //Prevents the function to be optimized-away (provokes an special "side-effect") - #endif - //offset == 1 && ptr != 0 is not legal for this pointer - if(!ptr){ - internal.m_offset = 1; - } - else{ - internal.m_offset = (OffsetType)((const char*)ptr - (const char*)(this)); - BOOST_ASSERT(internal.m_offset != 1); - } - } - - #if defined(_MSC_VER) && (_MSC_VER >= 1400) - __declspec(noinline) - #elif defined (__GNUC__) - __attribute__((__noinline__)) - #endif - PointedType * to_raw_pointer() const - { - #if defined (__GNUC__) - //asm(""); //Prevents the function to be optimized-away (provokes an special "side-effect") - #endif - return static_cast( - static_cast( - (internal.m_offset == 1) ? - 0 : - (const_cast(reinterpret_cast(this)) + internal.m_offset) - ) - ); - } - void inc_offset(DifferenceType bytes) { internal.m_offset += bytes; } void dec_offset(DifferenceType bytes) { internal.m_offset -= bytes; } - union internal_type{ - OffsetType m_offset; //Distance between this object and pointee address - typename ::boost::aligned_storage - < sizeof(OffsetType) - , (OffsetAlignment == offset_type_alignment) ? - ::boost::alignment_of::value : OffsetAlignment - >::type alignment_helper; - } internal; + ipcdetail::offset_ptr_internal internal; /// @endcond }; @@ -387,36 +585,36 @@ inline std::basic_istream & operator>> template inline boost::interprocess::offset_ptr static_pointer_cast(const boost::interprocess::offset_ptr & r) -{ +{ return boost::interprocess::offset_ptr - (r, boost::interprocess::ipcdetail::static_cast_tag()); + (r, boost::interprocess::ipcdetail::static_cast_tag()); } //!Simulation of const_cast between pointers. Never throws. template inline boost::interprocess::offset_ptr const_pointer_cast(const boost::interprocess::offset_ptr & r) -{ +{ return boost::interprocess::offset_ptr - (r, boost::interprocess::ipcdetail::const_cast_tag()); + (r, boost::interprocess::ipcdetail::const_cast_tag()); } //!Simulation of dynamic_cast between pointers. Never throws. template inline boost::interprocess::offset_ptr dynamic_pointer_cast(const boost::interprocess::offset_ptr & r) -{ +{ return boost::interprocess::offset_ptr - (r, boost::interprocess::ipcdetail::dynamic_cast_tag()); + (r, boost::interprocess::ipcdetail::dynamic_cast_tag()); } //!Simulation of reinterpret_cast between pointers. Never throws. template inline boost::interprocess::offset_ptr reinterpret_pointer_cast(const boost::interprocess::offset_ptr & r) -{ +{ return boost::interprocess::offset_ptr - (r, boost::interprocess::ipcdetail::reinterpret_cast_tag()); + (r, boost::interprocess::ipcdetail::reinterpret_cast_tag()); } } //namespace interprocess { @@ -437,17 +635,17 @@ struct has_trivial_destructor< boost::interprocess::offset_ptr > static const bool value = true; }; -//#if !defined(_MSC_VER) || (_MSC_VER >= 1400) + namespace interprocess { -//#endif + //!to_raw_pointer() enables boost::mem_fn to recognize offset_ptr. //!Never throws. template inline T * to_raw_pointer(boost::interprocess::offset_ptr const & p) -{ return p.get(); } -//#if !defined(_MSC_VER) || (_MSC_VER >= 1400) +{ return ipcdetail::to_raw_pointer(p); } + } //namespace interprocess -//#endif + /// @endcond } //namespace boost { @@ -479,28 +677,34 @@ struct pointer_plus_bits; template struct pointer_plus_bits, NumBits> { - typedef boost::interprocess::offset_ptr pointer; + typedef boost::interprocess::offset_ptr pointer; + typedef ::boost::interprocess::pointer_size_t_caster caster_t; //Bits are stored in the lower bits of the pointer except the LSB, //because this bit is used to represent the null pointer. - static const std::size_t Mask = ((std::size_t(1) << NumBits)-1)<<1u; + static const std::size_t Mask = ((std::size_t(1) << NumBits) - 1) << 1u; static pointer get_pointer(const pointer &n) - { return reinterpret_cast(std::size_t(n.get()) & ~std::size_t(Mask)); } - - static void set_pointer(pointer &n, pointer p) { - std::size_t pint = std::size_t(p.get()); - BOOST_ASSERT(0 == (std::size_t(pint) & Mask)); - n = reinterpret_cast(pint | (std::size_t(n.get()) & std::size_t(Mask))); + caster_t caster(n.get()); + return pointer(caster_t(caster.size() & ~Mask).pointer()); + } + + static void set_pointer(pointer &n, const pointer &p) + { + caster_t n_caster(n.get()); + caster_t p_caster(p.get()); + BOOST_ASSERT(0 == (p_caster.size() & Mask)); + n = caster_t(p_caster.size() | (n_caster.size() & Mask)).pointer(); } static std::size_t get_bits(const pointer &n) - { return(std::size_t(n.get()) & std::size_t(Mask)) >> 1u; } + { return (caster_t(n.get()).size() & Mask) >> 1u; } static void set_bits(pointer &n, std::size_t b) { BOOST_ASSERT(b < (std::size_t(1) << NumBits)); - n = reinterpret_cast(std::size_t(get_pointer(n).get()) | (b << 1u)); + caster_t n_caster(n.get()); + n = caster_t((n_caster.size() & ~Mask) | (b << 1u)).pointer(); } }; @@ -510,8 +714,6 @@ struct pointer_plus_bits, NumBits> template struct pointer_to_other; - - //Backwards compatibility with pointer_to_other template struct pointer_to_other diff --git a/3party/boost/boost/interprocess/permissions.hpp b/3party/boost/boost/interprocess/permissions.hpp index 745f8a8e0f..4266b24af1 100644 --- a/3party/boost/boost/interprocess/permissions.hpp +++ b/3party/boost/boost/interprocess/permissions.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/segment_manager.hpp b/3party/boost/boost/interprocess/segment_manager.hpp index 8680a953e2..61c9367374 100644 --- a/3party/boost/boost/interprocess/segment_manager.hpp +++ b/3party/boost/boost/interprocess/segment_manager.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -69,9 +69,9 @@ class segment_manager_base typedef typename MemoryAlgorithm::void_pointer void_pointer; typedef typename MemoryAlgorithm::mutex_family mutex_family; typedef MemoryAlgorithm memory_algorithm; - + /// @cond - + //Experimental. Don't use typedef typename MemoryAlgorithm::multiallocation_chain multiallocation_chain; typedef typename MemoryAlgorithm::difference_type difference_type; @@ -165,7 +165,7 @@ class segment_manager_base //!Allocates nbytes bytes. Throws boost::interprocess::bad_alloc //!on failure void * allocate(size_type nbytes) - { + { void * ret = MemoryAlgorithm::allocate(nbytes); if(!ret) throw bad_alloc(); @@ -180,7 +180,7 @@ class segment_manager_base //!Allocates nbytes bytes. This function is only used in //!single-segment management. Throws bad_alloc when fails void * allocate_aligned(size_type nbytes, size_type alignment) - { + { void * ret = MemoryAlgorithm::allocate_aligned(nbytes, alignment); if(!ret) throw bad_alloc(); @@ -293,7 +293,7 @@ class segment_manager_base void prot_anonymous_destroy(const void *object, ipcdetail::in_place_interface &table) { - //Get control data from associated with this object + //Get control data from associated with this object typedef ipcdetail::block_header block_header_t; block_header_t *ctrl_data = block_header_t::block_header_from_value(object, table.size, table.alignment); @@ -407,7 +407,7 @@ class segment_manager //!"size" is the size of the memory segment where //!the segment manager is being constructed. //!Can throw - segment_manager(size_type size) + explicit segment_manager(size_type size) : Base(size, priv_get_reserved_bytes()) , m_header(static_cast(get_this_pointer())) { @@ -446,7 +446,7 @@ class segment_manager //!Returns throwing "construct" proxy //!object template - typename construct_proxy::type + typename construct_proxy::type construct(char_ptr_holder_t name) { return typename construct_proxy::type (this, name, false, true); } @@ -466,27 +466,27 @@ class segment_manager //!Returns no throwing "search or construct" //!proxy object template - typename construct_proxy::type + typename construct_proxy::type find_or_construct(char_ptr_holder_t name, std::nothrow_t) { return typename construct_proxy::type (this, name, true, false); } //!Returns throwing "construct from iterators" proxy object template - typename construct_iter_proxy::type + typename construct_iter_proxy::type construct_it(char_ptr_holder_t name) { return typename construct_iter_proxy::type (this, name, false, true); } //!Returns throwing "search or construct from iterators" //!proxy object template - typename construct_iter_proxy::type + typename construct_iter_proxy::type find_or_construct_it(char_ptr_holder_t name) { return typename construct_iter_proxy::type (this, name, true, true); } //!Returns no throwing "construct from iterators" //!proxy object template - typename construct_iter_proxy::type + typename construct_iter_proxy::type construct_it(char_ptr_holder_t name, std::nothrow_t) { return typename construct_iter_proxy::type (this, name, false, false); } @@ -575,18 +575,18 @@ class segment_manager //!creation of "num" named objects in the managed memory segment. //!Can throw boost::interprocess::bad_alloc if there is no enough memory. void reserve_named_objects(size_type num) - { + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - m_header.m_named_index.reserve(num); + m_header.m_named_index.reserve(num); } //!Preallocates needed index resources to optimize the //!creation of "num" unique objects in the managed memory segment. //!Can throw boost::interprocess::bad_alloc if there is no enough memory. void reserve_unique_objects(size_type num) - { + { //------------------------------- scoped_lock guard(m_header); //------------------------------- @@ -596,32 +596,32 @@ class segment_manager //!Calls shrink_to_fit in both named and unique object indexes //!to try to free unused memory from those indexes. void shrink_to_fit_indexes() - { + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - m_header.m_named_index.shrink_to_fit(); - m_header.m_unique_index.shrink_to_fit(); + m_header.m_named_index.shrink_to_fit(); + m_header.m_unique_index.shrink_to_fit(); } //!Returns the number of named objects stored in //!the segment. size_type get_num_named_objects() - { + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - return m_header.m_named_index.size(); + return m_header.m_named_index.size(); } //!Returns the number of unique objects stored in //!the segment. size_type get_num_unique_objects() - { + { //------------------------------- scoped_lock guard(m_header); //------------------------------- - return m_header.m_unique_index.size(); + return m_header.m_unique_index.size(); } //!Obtains the minimum size needed by the @@ -713,7 +713,7 @@ class segment_manager //!returned pair is 0. template std::pair priv_find_impl (const CharType* name, bool lock) - { + { //The name can't be null, no anonymous object can be found by name BOOST_ASSERT(name != 0); ipcdetail::placement_destroy table; @@ -805,7 +805,7 @@ class segment_manager return 0; } CharType *name = static_cast(ctrl_data->template name()); - + //Sanity checks BOOST_ASSERT(ctrl_data->sizeof_char() == sizeof(CharType)); BOOST_ASSERT(ctrl_data->m_num_char == std::char_traits::length(name)); @@ -951,7 +951,7 @@ class segment_manager typedef ipcdetail::index_key index_key_t; typedef typename index_type::iterator index_it; typedef typename index_type::value_type intrusive_value_type; - + //------------------------------- scoped_lock guard(m_header); //------------------------------- @@ -972,7 +972,7 @@ class segment_manager void *memory = iv; void *values = ctrl_data->value(); std::size_t num = ctrl_data->m_value_bytes/table.size; - + //Sanity check BOOST_ASSERT((ctrl_data->m_value_bytes % table.size) == 0); BOOST_ASSERT(sizeof(CharT) == ctrl_data->sizeof_char()); @@ -1184,7 +1184,7 @@ class segment_manager //the memory allocation as the intrusive value is built in that //memory value_eraser v_eraser(index, it); - + //Construct array, this can throw ipcdetail::array_construct(ptr, num, table); @@ -1197,7 +1197,7 @@ class segment_manager //!Generic named new function for //!named functions template - void * priv_generic_named_construct(unsigned char type, + void * priv_generic_named_construct(unsigned char type, const CharT *name, size_type num, bool try2find, @@ -1346,7 +1346,7 @@ class segment_manager { named_index_t m_named_index; unique_index_t m_unique_index; - + header_t(Base *restricted_segment_mngr) : m_named_index (restricted_segment_mngr) , m_unique_index(restricted_segment_mngr) diff --git a/3party/boost/boost/interprocess/shared_memory_object.hpp b/3party/boost/boost/interprocess/shared_memory_object.hpp index f3bc7ba173..c501ee1a80 100644 --- a/3party/boost/boost/interprocess/shared_memory_object.hpp +++ b/3party/boost/boost/interprocess/shared_memory_object.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -87,10 +87,10 @@ class shared_memory_object //!After the call, "moved" does not represent any shared memory. //!Does not throw shared_memory_object &operator=(BOOST_RV_REF(shared_memory_object) moved) - { + { shared_memory_object tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps the shared_memory_objects. Does not throw @@ -99,7 +99,7 @@ class shared_memory_object //!Erases a shared memory object from the system. //!Returns false on error. Never throws static bool remove(const char *name); - + //!Sets the size of the shared memory mapping void truncate(offset_t length); @@ -157,10 +157,10 @@ inline bool shared_memory_object::get_size(offset_t &size) const { return ipcdetail::get_file_size((file_handle_t)m_handle, size); } inline void shared_memory_object::swap(shared_memory_object &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_filename.swap(other.m_filename); + m_filename.swap(other.m_filename); } inline mapping_handle_t shared_memory_object::get_mapping_handle() const diff --git a/3party/boost/boost/interprocess/smart_ptr/deleter.hpp b/3party/boost/boost/interprocess/smart_ptr/deleter.hpp index 3a07ccd8f4..8447bf1b34 100644 --- a/3party/boost/boost/interprocess/smart_ptr/deleter.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/deleter.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2011. +// (C) Copyright Ion Gaztanaga 2007-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp index 7daaee6ea4..f0006fb1b3 100644 --- a/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/detail/shared_count.hpp @@ -4,7 +4,7 @@ // // (C) Copyright Peter Dimov and Multi Media Ltd. 2001, 2002, 2003 // (C) Copyright Peter Dimov 2004-2005 -// (C) Copyright Ion Gaztanaga 2006-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // @@ -116,7 +116,7 @@ class shared_count } ~shared_count() // nothrow - { + { if(m_pi) m_pi->release(); } diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp index 24d96ee482..d03965cdcf 100644 --- a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2011. +// (C) Copyright Ion Gaztanaga 2007-2012. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp index edb39eeeb3..74f65f1814 100644 --- a/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp @@ -9,7 +9,7 @@ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd. // Copyright 2004-2005 Peter Dimov -// Copyright 2007-2011 Ion Gaztanaga +// Copyright 2007-2012 Ion Gaztanaga // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp b/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp index 9c8c7918f5..d9f16aece8 100644 --- a/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/enable_shared_from_this.hpp @@ -3,7 +3,7 @@ // This file is the adaptation for Interprocess of boost/enable_shared_from_this.hpp // // (C) Copyright Peter Dimov 2002 -// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // diff --git a/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp index f6d5c8b77c..897c5da4e8 100644 --- a/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/intrusive_ptr.hpp @@ -3,7 +3,7 @@ // This file is the adaptation for Interprocess of boost/intrusive_ptr.hpp // // (C) Copyright Peter Dimov 2001, 2002 -// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // @@ -125,7 +125,7 @@ class intrusive_ptr this_type(rhs).swap(*this); return *this; } - + //!Returns a reference to the internal pointer. //!Does not throw pointer &get() @@ -219,9 +219,9 @@ bool operator!=(const typename intrusive_ptr::pointer &a, template inline bool operator<(intrusive_ptr const & a, intrusive_ptr const & b) -{ +{ return std::less::pointer>() - (a.get(), b.get()); + (a.get(), b.get()); } //!Exchanges the contents of the two intrusive_ptrs. diff --git a/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp index a3755d3592..8a2ba363fb 100644 --- a/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/scoped_ptr.hpp @@ -4,7 +4,7 @@ // // (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. // (C) Copyright Peter Dimov 2001, 2002 -// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // diff --git a/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp index 5ede547a3f..302eb149f0 100644 --- a/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/shared_ptr.hpp @@ -4,7 +4,7 @@ // // (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. // (C) Copyright Peter Dimov 2001, 2002, 2003 -// (C) Copyright Ion Gaztanaga 2006-2011. +// (C) Copyright Ion Gaztanaga 2006-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) @@ -52,7 +52,7 @@ inline void sp_enable_shared_from_this (shared_count const & pn ,enable_shared_from_this *pe ,T *ptr) - + { (void)ptr; if(pe != 0){ @@ -125,7 +125,7 @@ class shared_ptr //!Requirements: Deleter and A's copy constructor must not throw. explicit shared_ptr(const pointer&p, const VoidAllocator &a = VoidAllocator(), const Deleter &d = Deleter()) : m_pn(p, a, d) - { + { //Check that the pointer passed is of the same type that //the pointer the allocator defines or it's a raw pointer typedef typename boost::intrusive:: @@ -223,15 +223,15 @@ class shared_ptr //!This is equivalent to: //!this_type().swap(*this); void reset() - { - this_type().swap(*this); + { + this_type().swap(*this); } //!This is equivalent to: //!this_type(p, a, d).swap(*this); template void reset(const Pointer &p, const VoidAllocator &a = VoidAllocator(), const Deleter &d = Deleter()) - { + { //Check that the pointer passed is of the same type that //the pointer the allocator defines or it's a raw pointer typedef typename boost::intrusive:: @@ -239,7 +239,7 @@ class shared_ptr rebind_pointer::type ParameterPointer; BOOST_STATIC_ASSERT((ipcdetail::is_same::value) || (ipcdetail::is_pointer::value)); - this_type(p, a, d).swap(*this); + this_type(p, a, d).swap(*this); } template diff --git a/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp index 89cdb1e6e2..e6503e2628 100644 --- a/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/unique_ptr.hpp @@ -5,7 +5,7 @@ // This file is the adaptation for Interprocess of // Howard Hinnant's unique_ptr emulation code. // -// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2006-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) // @@ -272,7 +272,7 @@ class unique_ptr //!Returns: A reference to the stored deleter. //! //!Throws: nothing. - deleter_reference get_deleter() + deleter_reference get_deleter() { return ptr_.second(); } //!Returns: A const reference to the stored deleter. @@ -328,7 +328,7 @@ class unique_ptr BOOST_MOVABLE_BUT_NOT_COPYABLE(unique_ptr) template unique_ptr(unique_ptr&); template unique_ptr(U&, typename ipcdetail::unique_ptr_error::type = 0); - + template unique_ptr& operator=(unique_ptr&); template typename ipcdetail::unique_ptr_error::type operator=(U&); /// @endcond diff --git a/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp b/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp index 5202ede91c..99c8a63190 100644 --- a/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp +++ b/3party/boost/boost/interprocess/smart_ptr/weak_ptr.hpp @@ -3,7 +3,7 @@ // This file is the adaptation for Interprocess of boost/weak_ptr.hpp // // (C) Copyright Peter Dimov 2001, 2002, 2003 -// (C) Copyright Ion Gaztanaga 2006-2011. +// (C) Copyright Ion Gaztanaga 2006-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) @@ -99,7 +99,7 @@ class weak_ptr template weak_ptr(weak_ptr const & r) : m_pn(r.m_pn) // never throws - { + { //Construct a temporary shared_ptr so that nobody //can destroy the value while constructing this const shared_ptr &ref = r.lock(); @@ -126,7 +126,7 @@ class weak_ptr //!implied guarantees) via different means, without creating a temporary. template weak_ptr & operator=(weak_ptr const & r) // never throws - { + { //Construct a temporary shared_ptr so that nobody //can destroy the value while constructing this const shared_ptr &ref = r.lock(); @@ -174,7 +174,7 @@ class weak_ptr //!testing purposes, not for production code. long use_count() const // never throws { return m_pn.use_count(); } - + //!Returns: Returns: use_count() == 0. //! //!Throws: nothing. @@ -199,7 +199,7 @@ class weak_ptr template bool _internal_less(weak_ptr const & rhs) const { return m_pn < rhs.m_pn; } - + template void _internal_assign(const ipcdetail::shared_count & pn2) { diff --git a/3party/boost/boost/interprocess/streams/bufferstream.hpp b/3party/boost/boost/interprocess/streams/bufferstream.hpp index 3ae9f5e2dc..2ef0ec2340 100644 --- a/3party/boost/boost/interprocess/streams/bufferstream.hpp +++ b/3party/boost/boost/interprocess/streams/bufferstream.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -8,7 +8,7 @@ // ////////////////////////////////////////////////////////////////////////////// // -// This file comes from SGI's sstream file. Modified by Ion Gaztanaga 2005. +// This file comes from SGI's sstream file. Modified by Ion Gaztanaga 2005-2012. // Changed internal SGI string to a buffer. Added efficient // internal buffer get/set/swap functions, so that we can obtain/establish the // internal buffer without any reallocation or copy. Kill those temporaries! @@ -42,7 +42,7 @@ #include #include #include -#include // char traits +#include // char traits #include // ptrdiff_t #include #include @@ -177,7 +177,7 @@ class basic_bufferbuf { bool in = false; bool out = false; - + const std::ios_base::openmode inout = std::ios_base::in | std::ios_base::out; diff --git a/3party/boost/boost/interprocess/streams/vectorstream.hpp b/3party/boost/boost/interprocess/streams/vectorstream.hpp index 3cee7200ab..0c9f540e33 100644 --- a/3party/boost/boost/interprocess/streams/vectorstream.hpp +++ b/3party/boost/boost/interprocess/streams/vectorstream.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -8,7 +8,7 @@ // ////////////////////////////////////////////////////////////////////////////// // -// This file comes from SGI's sstream file. Modified by Ion Gaztanaga 2005. +// This file comes from SGI's sstream file. Modified by Ion Gaztanaga 2005-2012. // Changed internal SGI string to a generic, templatized vector. Added efficient // internal buffer get/set/swap functions, so that we can obtain/establish the // internal buffer without any reallocation or copy. Kill those temporaries! @@ -43,7 +43,7 @@ #include #include #include -#include // char traits +#include // char traits #include // ptrdiff_t #include #include @@ -100,7 +100,7 @@ class basic_vectorbuf //!This function resets the read/write position in the stream. //!Does not throw. void swap_vector(vector_type &vect) - { + { if (this->m_mode & std::ios_base::out){ //Update high water if necessary //And resize vector to remove extra size @@ -119,7 +119,7 @@ class basic_vectorbuf //!Returns a const reference to the internal vector. //!Does not throw. const vector_type &vector() const - { + { if (this->m_mode & std::ios_base::out){ if (mp_high_water < base_t::pptr()){ //Restore the vector's size if necessary diff --git a/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp b/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp index eaad671cdf..09643b408e 100644 --- a/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp +++ b/3party/boost/boost/interprocess/sync/detail/condition_algorithm_8a.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -14,6 +14,7 @@ #include #include #include +#include #include namespace boost { @@ -161,6 +162,15 @@ namespace ipcdetail { // mutex_type &get_mtx_unblock_lock() // }; // +// Must be initialized as following +// +// get_nwaiters_blocked() == 0 +// get_nwaiters_gone() == 0 +// get_nwaiters_to_unblock() == 0 +// get_sem_block_queue() == initial count 0 +// get_sem_block_lock() == initial count 1 +// get_mtx_unblock_lock() (unlocked) +// template class condition_algorithm_8a { @@ -174,16 +184,10 @@ class condition_algorithm_8a typedef typename ConditionMembers::mutex_type mutex_type; typedef typename ConditionMembers::integer_type integer_type; - // nwaiters_blocked == 0 - // nwaiters_gone() == 0 - // nwaiters_to_unblock == 0 - // sem_block_queue() == initial count 0 - // sem_block_lock() == initial count 1 - // mtx_unblock_lock (unlocked) - public: - template - static bool wait (ConditionMembers &data, bool timeout_enabled, const boost::posix_time::ptime &abs_time, InterprocessMutex &mut); + template + static bool wait ( ConditionMembers &data, Lock &lock + , bool timeout_enabled, const boost::posix_time::ptime &abs_time); static void signal(ConditionMembers &data, bool broadcast); }; @@ -235,9 +239,13 @@ inline void condition_algorithm_8a::signal(ConditionMembers &d } template -template +template inline bool condition_algorithm_8a::wait - (ConditionMembers &data, bool tout_enabled, const boost::posix_time::ptime &abs_time, InterprocessMutex &mtxExternal) + ( ConditionMembers &data + , Lock &lock + , bool tout_enabled + , const boost::posix_time::ptime &abs_time + ) { //Initialize to avoid warnings integer_type nsignals_was_left = 0; @@ -247,19 +255,13 @@ inline bool condition_algorithm_8a::wait ++data.get_nwaiters_blocked(); data.get_sem_block_lock().post(); - struct scoped_unlock - { - InterprocessMutex & mut; - scoped_unlock(InterprocessMutex & m) - : mut(m) - { m.unlock(); } + //Unlock external lock and program for relock + lock_inverter inverted_lock(lock); + scoped_lock > external_unlock(inverted_lock); - ~scoped_unlock() - { mut.lock(); } - } unlocker(mtxExternal); - - - bool bTimedOut = tout_enabled ? !data.get_sem_block_queue().timed_wait(abs_time) : (data.get_sem_block_queue().wait(), false); + bool bTimedOut = tout_enabled + ? !data.get_sem_block_queue().timed_wait(abs_time) + : (data.get_sem_block_queue().wait(), false); { scoped_lock locker(data.get_mtx_unblock_lock()); @@ -290,7 +292,7 @@ inline bool condition_algorithm_8a::wait data.get_nwaiters_gone() = 0; } //locker's destructor triggers data.get_mtx_unblock_lock().unlock() - } + } if ( 1 == nsignals_was_left ) { if ( 0 != nwaiters_was_gone ) { @@ -302,11 +304,87 @@ inline bool condition_algorithm_8a::wait data.get_sem_block_lock().post(); // open the gate } - //mtxExternal.lock(); called from unlocker + //lock.lock(); called from unlocker destructor return ( bTimedOut ) ? false : true; } + +template +class condition_8a_wrapper +{ + //Non-copyable + condition_8a_wrapper(const condition_8a_wrapper &); + condition_8a_wrapper &operator=(const condition_8a_wrapper &); + + ConditionMembers m_data; + typedef ipcdetail::condition_algorithm_8a algo_type; + + public: + + condition_8a_wrapper(){} + + ~condition_8a_wrapper(){} + + ConditionMembers & get_members() + { return m_data; } + + const ConditionMembers & get_members() const + { return m_data; } + + void notify_one() + { algo_type::signal(m_data, false); } + + void notify_all() + { algo_type::signal(m_data, true); } + + template + void wait(L& lock) + { + if (!lock) + throw lock_exception(); + algo_type::wait(m_data, lock, false, boost::posix_time::ptime()); + } + + template + void wait(L& lock, Pr pred) + { + if (!lock) + throw lock_exception(); + + while (!pred()) + algo_type::wait(m_data, lock, false, boost::posix_time::ptime()); + } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock); + return true; + } + if (!lock) + throw lock_exception(); + return algo_type::wait(m_data, lock, true, abs_time); + } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock, pred); + return true; + } + if (!lock) + throw lock_exception(); + while (!pred()){ + if (!algo_type::wait(m_data, lock, true, abs_time)) + return pred(); + } + return true; + } +}; + } //namespace ipcdetail } //namespace interprocess } //namespace boost diff --git a/3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp b/3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp new file mode 100644 index 0000000000..a276f826b0 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/detail/condition_any_algorithm.hpp @@ -0,0 +1,224 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2012-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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_CONDITION_ANY_ALGORITHM_HPP +#define BOOST_INTERPROCESS_DETAIL_CONDITION_ANY_ALGORITHM_HPP + +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +// +// Condition variable 'any' (able to use any type of external mutex) +// +// The code is based on Howard E. Hinnant's ISO C++ N2406 paper. +// Many thanks to Howard for his support and comments. +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +// Required interface for ConditionAnyMembers +// class ConditionAnyMembers +// { +// typedef implementation_defined mutex_type; +// typedef implementation_defined condvar_type; +// +// condvar &get_condvar() +// mutex_type &get_mutex() +// }; +// +// Must be initialized as following +// +// get_condvar() [no threads blocked] +// get_mutex() [unlocked] + +template +class condition_any_algorithm +{ + private: + condition_any_algorithm(); + ~condition_any_algorithm(); + condition_any_algorithm(const condition_any_algorithm &); + condition_any_algorithm &operator=(const condition_any_algorithm &); + + typedef typename ConditionAnyMembers::mutex_type mutex_type; + typedef typename ConditionAnyMembers::condvar_type condvar_type; + + template + static void do_wait(ConditionAnyMembers &data, Lock& lock); + + template + static bool do_timed_wait(ConditionAnyMembers &data, Lock& lock, const boost::posix_time::ptime &abs_time); + + public: + template + static bool wait ( ConditionAnyMembers &data, Lock &mut + , bool timeout_enabled, const boost::posix_time::ptime &abs_time); + static void signal( ConditionAnyMembers &data, bool broadcast); +}; + +template +void condition_any_algorithm::signal(ConditionAnyMembers &data, bool broadcast) +{ + scoped_lock internal_lock(data.get_mutex()); + if(broadcast){ + data.get_condvar().notify_all(); + } + else{ + data.get_condvar().notify_one(); + } +} + +template +template +bool condition_any_algorithm::wait + ( ConditionAnyMembers &data + , Lock &lock + , bool tout_enabled + , const boost::posix_time::ptime &abs_time) +{ + if(tout_enabled){ + return condition_any_algorithm::do_timed_wait(data, lock, abs_time); + } + else{ + condition_any_algorithm::do_wait(data, lock); + return true; + } +} + +template +template +void condition_any_algorithm::do_wait + (ConditionAnyMembers &data, Lock& lock) +{ + //lock internal before unlocking external to avoid race with a notifier + scoped_lock internal_lock(data.get_mutex()); + { + lock_inverter inverted_lock(lock); + scoped_lock > external_unlock(inverted_lock); + { //unlock internal first to avoid deadlock with near simultaneous waits + scoped_lock internal_unlock; + internal_lock.swap(internal_unlock); + data.get_condvar().wait(internal_unlock); + } + } +} + +template +template +bool condition_any_algorithm::do_timed_wait + (ConditionAnyMembers &data, Lock& lock, const boost::posix_time::ptime &abs_time) +{ + //lock internal before unlocking external to avoid race with a notifier + scoped_lock internal_lock(data.get_mutex()); + { + //Unlock external lock and program for relock + lock_inverter inverted_lock(lock); + scoped_lock > external_unlock(inverted_lock); + { //unlock internal first to avoid deadlock with near simultaneous waits + scoped_lock internal_unlock; + internal_lock.swap(internal_unlock); + return data.get_condvar().timed_wait(internal_unlock, abs_time); + } + } +} + + +template +class condition_any_wrapper +{ + //Non-copyable + condition_any_wrapper(const condition_any_wrapper &); + condition_any_wrapper &operator=(const condition_any_wrapper &); + + ConditionAnyMembers m_data; + typedef ipcdetail::condition_any_algorithm algo_type; + + public: + + condition_any_wrapper(){} + + ~condition_any_wrapper(){} + + ConditionAnyMembers & get_members() + { return m_data; } + + const ConditionAnyMembers & get_members() const + { return m_data; } + + void notify_one() + { algo_type::signal(m_data, false); } + + void notify_all() + { algo_type::signal(m_data, true); } + + template + void wait(L& lock) + { + if (!lock) + throw lock_exception(); + algo_type::wait(m_data, lock, false, boost::posix_time::ptime()); + } + + template + void wait(L& lock, Pr pred) + { + if (!lock) + throw lock_exception(); + + while (!pred()) + algo_type::wait(m_data, lock, false, boost::posix_time::ptime()); + } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock); + return true; + } + if (!lock) + throw lock_exception(); + return algo_type::wait(m_data, lock, true, abs_time); + } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { + if(abs_time == boost::posix_time::pos_infin){ + this->wait(lock, pred); + return true; + } + if (!lock) + throw lock_exception(); + while (!pred()){ + if (!algo_type::wait(m_data, lock, true, abs_time)) + return pred(); + } + return true; + } +}; + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_CONDITION_ANY_ALGORITHM_HPP diff --git a/3party/boost/boost/interprocess/sync/detail/locks.hpp b/3party/boost/boost/interprocess/sync/detail/locks.hpp new file mode 100644 index 0000000000..fbb003aa0d --- /dev/null +++ b/3party/boost/boost/interprocess/sync/detail/locks.hpp @@ -0,0 +1,66 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2012-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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_DETAIL_LOCKS_HPP +#define BOOST_INTERPROCESS_DETAIL_LOCKS_HPP + +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +template +class internal_mutex_lock +{ + typedef void (internal_mutex_lock::*unspecified_bool_type)(); + public: + + typedef typename Lock::mutex_type::internal_mutex_type mutex_type; + + + internal_mutex_lock(Lock &l) + : l_(l) + {} + + mutex_type* mutex() const + { return l_ ? &l_.mutex()->internal_mutex() : 0; } + + void lock() { l_.lock(); } + + void unlock() { l_.unlock(); } + + operator unspecified_bool_type() const + { return l_ ? &internal_mutex_lock::lock : 0; } + + private: + Lock &l_; +}; + +template +class lock_inverter +{ + Lock &l_; + public: + lock_inverter(Lock &l) + : l_(l) + {} + void lock() { l_.unlock(); } + void unlock() { l_.lock(); } +}; + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif //BOOST_INTERPROCESS_DETAIL_LOCKS_HPP diff --git a/3party/boost/boost/interprocess/sync/file_lock.hpp b/3party/boost/boost/interprocess/sync/file_lock.hpp index e0f75465fb..ef1c68a449 100644 --- a/3party/boost/boost/interprocess/sync/file_lock.hpp +++ b/3party/boost/boost/interprocess/sync/file_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -64,10 +64,10 @@ class file_lock //!After the call, "moved" does not represent any file mapping. //!Does not throw file_lock &operator=(BOOST_RV_REF(file_lock) moved) - { + { file_lock tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Closes a file lock. Does not throw. @@ -81,7 +81,7 @@ class file_lock m_file_hnd = other.m_file_hnd; other.m_file_hnd = tmp; } - + //Exclusive locking //!Effects: The calling thread tries to obtain exclusive ownership of the mutex, @@ -171,7 +171,7 @@ class file_lock bool timed_acquire_file_lock_sharable (file_handle_t hnd, bool &acquired, const boost::posix_time::ptime &abs_time) - { + { //Obtain current count and target time boost::posix_time::ptime now = microsec_clock::universal_time(); using namespace boost::detail; diff --git a/3party/boost/boost/interprocess/sync/interprocess_condition.hpp b/3party/boost/boost/interprocess/sync/interprocess_condition.hpp index 9d0bea640e..c30e870d77 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_condition.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -54,6 +55,11 @@ class named_condition; //!This class is a condition variable that can be placed in shared memory or //!memory mapped files. +//!Destroys the object of type std::condition_variable_any +//! +//!Unlike std::condition_variable in C++11, it is NOT safe to invoke the destructor if all +//!threads have been only notified. It is required that they have exited their respective wait +//!functions. class interprocess_condition { /// @cond @@ -62,13 +68,16 @@ class interprocess_condition interprocess_condition &operator=(const interprocess_condition &); friend class named_condition; /// @endcond + public: //!Constructs a interprocess_condition. On error throws interprocess_exception. - interprocess_condition(){} + interprocess_condition() + {} //!Destroys *this //!liberating system resources. - ~interprocess_condition(){} + ~interprocess_condition() + {} //!If there is a thread waiting on *this, change that //!thread's state to ready. Otherwise there is no effect. @@ -85,10 +94,9 @@ class interprocess_condition //!this->notify_one() or this->notify_all(), and then reacquires the lock. template void wait(L& lock) - { - if (!lock) - throw lock_exception(); - this->do_wait(*lock.mutex()); + { + ipcdetail::internal_mutex_lock internal_lock(lock); + m_condition.wait(internal_lock); } //!The same as: @@ -96,11 +104,8 @@ class interprocess_condition template void wait(L& lock, Pr pred) { - if (!lock) - throw lock_exception(); - - while (!pred()) - this->do_wait(*lock.mutex()); + ipcdetail::internal_mutex_lock internal_lock(lock); + m_condition.wait(internal_lock, pred); } //!Releases the lock on the interprocess_mutex object associated with lock, blocks @@ -111,13 +116,8 @@ class interprocess_condition template bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) { - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock); - return true; - } - if (!lock) - throw lock_exception(); - return this->do_timed_wait(abs_time, *lock.mutex()); + ipcdetail::internal_mutex_lock internal_lock(lock); + return m_condition.timed_wait(internal_lock, abs_time); } //!The same as: while (!pred()) { @@ -126,28 +126,12 @@ class interprocess_condition template bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) { - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock, pred); - return true; - } - if (!lock) - throw lock_exception(); - while (!pred()){ - if (!this->do_timed_wait(abs_time, *lock.mutex())) - return pred(); - } - - return true; + ipcdetail::internal_mutex_lock internal_lock(lock); + return m_condition.timed_wait(internal_lock, abs_time, pred); } /// @cond - void do_wait(interprocess_mutex &mut) - { m_condition.do_wait(mut.mutex); } - - bool do_timed_wait(const boost::posix_time::ptime &abs_time, interprocess_mutex &mut) - { return m_condition.do_timed_wait(abs_time, mut.mutex); } - private: #if defined (BOOST_INTERPROCESS_USE_GENERIC_EMULATION) #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION diff --git a/3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp b/3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp new file mode 100644 index 0000000000..dd20794675 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/interprocess_condition_any.hpp @@ -0,0 +1,129 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2012-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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_CONDITION_ANY_HPP +#define BOOST_INTERPROCESS_CONDITION_ANY_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +/// @cond + +#include +#include + +#include +#include +#include +#include +#include + +/// @endcond + +//!\file +//!Describes process-shared variables interprocess_condition_any class + +namespace boost { + +namespace posix_time +{ class ptime; } + +namespace interprocess { + +//!This class is a condition variable that can be placed in shared memory or +//!memory mapped files. +//! +//!The interprocess_condition_any class is a generalization of interprocess_condition. +//!Whereas interprocess_condition works only on Locks with mutex_type == interprocess_mutex +//!interprocess_condition_any can operate on any user-defined lock that meets the BasicLockable +//!requirements (lock()/unlock() member functions). +//! +//!Unlike std::condition_variable_any in C++11, it is NOT safe to invoke the destructor if all +//!threads have been only notified. It is required that they have exited their respective wait +//!functions. +class interprocess_condition_any +{ + /// @cond + //Non-copyable + interprocess_condition_any(const interprocess_condition_any &); + interprocess_condition_any &operator=(const interprocess_condition_any &); + + class members + { + public: + typedef interprocess_condition condvar_type; + typedef interprocess_mutex mutex_type; + + condvar_type &get_condvar() { return m_cond; } + mutex_type &get_mutex() { return m_mut; } + + private: + condvar_type m_cond; + mutex_type m_mut; + }; + + ipcdetail::condition_any_wrapper m_cond; + + /// @endcond + public: + //!Constructs a interprocess_condition_any. On error throws interprocess_exception. + interprocess_condition_any(){} + + //!Destroys *this + //!liberating system resources. + ~interprocess_condition_any(){} + + //!If there is a thread waiting on *this, change that + //!thread's state to ready. Otherwise there is no effect. + void notify_one() + { m_cond.notify_one(); } + + //!Change the state of all threads waiting on *this to ready. + //!If there are no waiting threads, notify_all() has no effect. + void notify_all() + { m_cond.notify_all(); } + + //!Releases the lock on the interprocess_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), and then reacquires the lock. + template + void wait(L& lock) + { m_cond.wait(lock); } + + //!The same as: + //!while (!pred()) wait(lock) + template + void wait(L& lock, Pr pred) + { m_cond.wait(lock, pred); } + + //!Releases the lock on the interprocess_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!and then reacquires the lock. + //!Returns: false if time abs_time is reached, otherwise true. + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { return m_cond.timed_wait(lock, abs_time); } + + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); + //! } return true; + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { return m_cond.timed_wait(lock, abs_time, pred); } +}; + +} //namespace interprocess +} // namespace boost + +#include + +#endif // BOOST_INTERPROCESS_CONDITION_ANY_HPP diff --git a/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp index 8110c8472b..5615e8b9aa 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -70,6 +70,25 @@ class interprocess_mutex interprocess_mutex(const interprocess_mutex &); interprocess_mutex &operator=(const interprocess_mutex &); friend class interprocess_condition; + + public: + #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) + #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION + typedef ipcdetail::spin_mutex internal_mutex_type; + private: + friend class ipcdetail::robust_emulation_helpers::mutex_traits; + void take_ownership(){ m_mutex.take_ownership(); } + public: + #elif defined(BOOST_INTERPROCESS_USE_POSIX) + #undef BOOST_INTERPROCESS_USE_POSIX + typedef ipcdetail::posix_mutex internal_mutex_type; + #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) + #undef BOOST_INTERPROCESS_USE_WINDOWS + typedef ipcdetail::windows_mutex internal_mutex_type; + #else + #error "Unknown platform for interprocess_mutex" + #endif + /// @endcond public: @@ -107,23 +126,16 @@ class interprocess_mutex //!Effects: The calling thread releases the exclusive ownership of the mutex. //!Throws: interprocess_exception on error. void unlock(); - /// @cond - private: - #if defined(BOOST_INTERPROCESS_USE_GENERIC_EMULATION) - #undef BOOST_INTERPROCESS_USE_GENERIC_EMULATION - friend class ipcdetail::robust_emulation_helpers::mutex_traits; - void take_ownership(){ mutex.take_ownership(); } - ipcdetail::spin_mutex mutex; - #elif defined(BOOST_INTERPROCESS_USE_POSIX) - #undef BOOST_INTERPROCESS_USE_POSIX - ipcdetail::posix_mutex mutex; - #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) - #undef BOOST_INTERPROCESS_USE_WINDOWS - ipcdetail::windows_mutex mutex; - #else - #error "Unknown platform for interprocess_mutex" - #endif + /// @cond + internal_mutex_type &internal_mutex() + { return m_mutex; } + + const internal_mutex_type &internal_mutex() const + { return m_mutex; } + + private: + internal_mutex_type m_mutex; /// @endcond }; @@ -144,23 +156,25 @@ inline void interprocess_mutex::lock() boost::posix_time::ptime wait_time = boost::posix_time::microsec_clock::universal_time() + boost::posix_time::milliseconds(BOOST_INTERPROCESS_TIMEOUT_WHEN_LOCKING_DURATION_MS); - if (!mutex.timed_lock(wait_time)) + if (!m_mutex.timed_lock(wait_time)) { - throw interprocess_exception(timeout_when_locking_error, "Interprocess mutex timeout when locking. Possible deadlock: owner died without unlocking?"); + throw interprocess_exception(timeout_when_locking_error + , "Interprocess mutex timeout when locking. Possible deadlock: " + "owner died without unlocking?"); } #else - mutex.lock(); + m_mutex.lock(); #endif } inline bool interprocess_mutex::try_lock() -{ return mutex.try_lock(); } +{ return m_mutex.try_lock(); } inline bool interprocess_mutex::timed_lock(const boost::posix_time::ptime &abs_time) -{ return mutex.timed_lock(abs_time); } +{ return m_mutex.timed_lock(abs_time); } inline void interprocess_mutex::unlock() -{ mutex.unlock(); } +{ m_mutex.unlock(); } } //namespace interprocess { } //namespace boost { diff --git a/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp index 3079108645..1c5dad370a 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp b/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp index 2a2f34fdcf..2fe058183b 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp new file mode 100644 index 0000000000..880563c309 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/interprocess_sharable_mutex.hpp @@ -0,0 +1,347 @@ +////////////////////////////////////////////////////////////////////////////// +// Code based on Howard Hinnant's shared_mutex class +// +// (C) Copyright Howard Hinnant 2007-2010. Distributed under the Boost +// Software License, Version 1.0. (see http://www.boost.org/LICENSE_1_0.txt) +// +// (C) Copyright Ion Gaztanaga 2005-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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_SHARABLE_MUTEX_HPP +#define BOOST_INTERPROCESS_SHARABLE_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include + + +//!\file +//!Describes interprocess_sharable_mutex class + +namespace boost { +namespace interprocess { + +//!Wraps a interprocess_sharable_mutex that can be placed in shared memory and can be +//!shared between processes. Allows timed lock tries +class interprocess_sharable_mutex +{ + //Non-copyable + interprocess_sharable_mutex(const interprocess_sharable_mutex &); + interprocess_sharable_mutex &operator=(const interprocess_sharable_mutex &); + + friend class interprocess_condition; + public: + + //!Constructs the sharable lock. + //!Throws interprocess_exception on error. + interprocess_sharable_mutex(); + + //!Destroys the sharable lock. + //!Does not throw. + ~interprocess_sharable_mutex(); + + //Exclusive locking + + //!Effects: The calling thread tries to obtain exclusive ownership of the mutex, + //! and if another thread has exclusive or sharable ownership of + //! the mutex, it waits until it can obtain the ownership. + //!Throws: interprocess_exception on error. + void lock(); + + //!Effects: The calling thread tries to acquire exclusive ownership of the mutex + //! without waiting. If no other thread has exclusive or sharable + //! ownership of the mutex this succeeds. + //!Returns: If it can acquire exclusive ownership immediately returns true. + //! If it has to wait, returns false. + //!Throws: interprocess_exception on error. + bool try_lock(); + + //!Effects: The calling thread tries to acquire exclusive ownership of the mutex + //! waiting if necessary until no other thread has exclusive or sharable + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Throws: interprocess_exception on error. + bool timed_lock(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The calling thread releases the exclusive ownership of the mutex. + //!Throws: An exception derived from interprocess_exception on error. + void unlock(); + + //Sharable locking + + //!Effects: The calling thread tries to obtain sharable ownership of the mutex, + //! and if another thread has exclusive ownership of the mutex, + //! waits until it can obtain the ownership. + //!Throws: interprocess_exception on error. + void lock_sharable(); + + //!Effects: The calling thread tries to acquire sharable ownership of the mutex + //! without waiting. If no other thread has exclusive ownership + //! of the mutex this succeeds. + //!Returns: If it can acquire sharable ownership immediately returns true. If it + //! has to wait, returns false. + //!Throws: interprocess_exception on error. + bool try_lock_sharable(); + + //!Effects: The calling thread tries to acquire sharable ownership of the mutex + //! waiting if necessary until no other thread has exclusive + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. + //!Throws: interprocess_exception on error. + bool timed_lock_sharable(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The calling thread releases the sharable ownership of the mutex. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_sharable(); + + /// @cond + private: + typedef scoped_lock scoped_lock_t; + + //Pack all the control data in a word to be able + //to use atomic instructions in the future + struct control_word_t + { + unsigned exclusive_in : 1; + unsigned num_shared : sizeof(unsigned)*CHAR_BIT-1; + } m_ctrl; + + interprocess_mutex m_mut; + interprocess_condition m_first_gate; + interprocess_condition m_second_gate; + + private: + //Rollback structures for exceptions or failure return values + struct exclusive_rollback + { + exclusive_rollback(control_word_t &ctrl + ,interprocess_condition &first_gate) + : mp_ctrl(&ctrl), m_first_gate(first_gate) + {} + + void release() + { mp_ctrl = 0; } + + ~exclusive_rollback() + { + if(mp_ctrl){ + mp_ctrl->exclusive_in = 0; + m_first_gate.notify_all(); + } + } + control_word_t *mp_ctrl; + interprocess_condition &m_first_gate; + }; + + template + struct base_constants_t + { + static const unsigned max_readers + = ~(unsigned(1) << (sizeof(unsigned)*CHAR_BIT-1)); + }; + typedef base_constants_t<0> constants; + /// @endcond +}; + +/// @cond + +template +const unsigned interprocess_sharable_mutex::base_constants_t::max_readers; + +inline interprocess_sharable_mutex::interprocess_sharable_mutex() +{ + this->m_ctrl.exclusive_in = 0; + this->m_ctrl.num_shared = 0; +} + +inline interprocess_sharable_mutex::~interprocess_sharable_mutex() +{} + +inline void interprocess_sharable_mutex::lock() +{ + scoped_lock_t lock(m_mut); + + //The exclusive lock must block in the first gate + //if an exclusive lock has been acquired + while (this->m_ctrl.exclusive_in){ + this->m_first_gate.wait(lock); + } + + //Mark that exclusive lock has been acquired + this->m_ctrl.exclusive_in = 1; + + //Prepare rollback + exclusive_rollback rollback(this->m_ctrl, this->m_first_gate); + + //Now wait until all readers are gone + while (this->m_ctrl.num_shared){ + this->m_second_gate.wait(lock); + } + rollback.release(); +} + +inline bool interprocess_sharable_mutex::try_lock() +{ + scoped_lock_t lock(m_mut, try_to_lock); + + //If we can't lock or any has there is any exclusive + //or sharable mark return false; + if(!lock.owns() + || this->m_ctrl.exclusive_in + || this->m_ctrl.num_shared){ + return false; + } + this->m_ctrl.exclusive_in = 1; + return true; +} + +inline bool interprocess_sharable_mutex::timed_lock + (const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock(); + return true; + } + scoped_lock_t lock(m_mut, abs_time); + if(!lock.owns()) return false; + + //The exclusive lock must block in the first gate + //if an exclusive lock has been acquired + while (this->m_ctrl.exclusive_in){ + if(!this->m_first_gate.timed_wait(lock, abs_time)){ + if(this->m_ctrl.exclusive_in){ + return false; + } + break; + } + } + + //Mark that exclusive lock has been acquired + this->m_ctrl.exclusive_in = 1; + + //Prepare rollback + exclusive_rollback rollback(this->m_ctrl, this->m_first_gate); + + //Now wait until all readers are gone + while (this->m_ctrl.num_shared){ + if(!this->m_second_gate.timed_wait(lock, abs_time)){ + if(this->m_ctrl.num_shared){ + return false; + } + break; + } + } + rollback.release(); + return true; +} + +inline void interprocess_sharable_mutex::unlock() +{ + scoped_lock_t lock(m_mut); + this->m_ctrl.exclusive_in = 0; + this->m_first_gate.notify_all(); +} + +//Sharable locking + +inline void interprocess_sharable_mutex::lock_sharable() +{ + scoped_lock_t lock(m_mut); + + //The sharable lock must block in the first gate + //if an exclusive lock has been acquired + //or there are too many sharable locks + while(this->m_ctrl.exclusive_in + || this->m_ctrl.num_shared == constants::max_readers){ + this->m_first_gate.wait(lock); + } + + //Increment sharable count + ++this->m_ctrl.num_shared; +} + +inline bool interprocess_sharable_mutex::try_lock_sharable() +{ + scoped_lock_t lock(m_mut, try_to_lock); + + //The sharable lock must fail + //if an exclusive lock has been acquired + //or there are too many sharable locks + if(!lock.owns() + || this->m_ctrl.exclusive_in + || this->m_ctrl.num_shared == constants::max_readers){ + return false; + } + + //Increment sharable count + ++this->m_ctrl.num_shared; + return true; +} + +inline bool interprocess_sharable_mutex::timed_lock_sharable + (const boost::posix_time::ptime &abs_time) +{ + if(abs_time == boost::posix_time::pos_infin){ + this->lock_sharable(); + return true; + } + scoped_lock_t lock(m_mut, abs_time); + if(!lock.owns()) return false; + + //The sharable lock must block in the first gate + //if an exclusive lock has been acquired + //or there are too many sharable locks + while (this->m_ctrl.exclusive_in + || this->m_ctrl.num_shared == constants::max_readers){ + if(!this->m_first_gate.timed_wait(lock, abs_time)){ + if(this->m_ctrl.exclusive_in + || this->m_ctrl.num_shared == constants::max_readers){ + return false; + } + break; + } + } + + //Increment sharable count + ++this->m_ctrl.num_shared; + return true; +} + +inline void interprocess_sharable_mutex::unlock_sharable() +{ + scoped_lock_t lock(m_mut); + //Decrement sharable count + --this->m_ctrl.num_shared; + if (this->m_ctrl.num_shared == 0){ + this->m_second_gate.notify_one(); + } + //Check if there are blocked sharables because of + //there were too many sharables + else if(this->m_ctrl.num_shared == (constants::max_readers-1)){ + this->m_first_gate.notify_all(); + } +} + +/// @endcond + +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_SHARABLE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp index 8d5a452626..303bee661f 100644 --- a/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/interprocess_upgradable_mutex.hpp @@ -1,6 +1,8 @@ -////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// Code based on Howard Hinnant's upgrade_mutex class +// +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -249,7 +251,7 @@ class interprocess_upgradable_mutex if(mp_ctrl){ //Recover upgradable lock mp_ctrl->upgradable_in = 1; - ++mp_ctrl->num_upr_shar; + ++mp_ctrl->num_upr_shar; //Execute the second half of exclusive locking mp_ctrl->exclusive_in = 0; } @@ -333,8 +335,12 @@ inline bool interprocess_upgradable_mutex::timed_lock //The exclusive lock must block in the first gate //if an exclusive or upgradable lock has been acquired while (this->m_ctrl.exclusive_in || this->m_ctrl.upgradable_in){ - if(!this->m_first_gate.timed_wait(lock, abs_time)) - return !(this->m_ctrl.exclusive_in || this->m_ctrl.upgradable_in); + if(!this->m_first_gate.timed_wait(lock, abs_time)){ + if(this->m_ctrl.exclusive_in || this->m_ctrl.upgradable_in){ + return false; + } + break; + } } //Mark that exclusive lock has been acquired @@ -346,7 +352,10 @@ inline bool interprocess_upgradable_mutex::timed_lock //Now wait until all readers are gone while (this->m_ctrl.num_upr_shar){ if(!this->m_second_gate.timed_wait(lock, abs_time)){ - return !(this->m_ctrl.num_upr_shar); + if(this->m_ctrl.num_upr_shar){ + return false; + } + break; } } rollback.release(); @@ -418,9 +427,12 @@ inline bool interprocess_upgradable_mutex::timed_lock_upgradable || this->m_ctrl.upgradable_in || this->m_ctrl.num_upr_shar == constants::max_readers){ if(!this->m_first_gate.timed_wait(lock, abs_time)){ - return!(this->m_ctrl.exclusive_in - || this->m_ctrl.upgradable_in - || this->m_ctrl.num_upr_shar == constants::max_readers); + if((this->m_ctrl.exclusive_in + || this->m_ctrl.upgradable_in + || this->m_ctrl.num_upr_shar == constants::max_readers)){ + return false; + } + break; } } @@ -492,9 +504,12 @@ inline bool interprocess_upgradable_mutex::timed_lock_sharable //or there are too many sharable locks while (this->m_ctrl.exclusive_in || this->m_ctrl.num_upr_shar == constants::max_readers){ - if(!this->m_first_gate.timed_wait(lock, abs_time)){ - return!(this->m_ctrl.exclusive_in - || this->m_ctrl.num_upr_shar == constants::max_readers); + if(!this->m_first_gate.timed_wait(lock, abs_time)){ + if(this->m_ctrl.exclusive_in + || this->m_ctrl.num_upr_shar == constants::max_readers){ + return false; + } + break; } } @@ -561,7 +576,7 @@ inline void interprocess_upgradable_mutex::unlock_upgradable_and_lock() //Simulate unlock_upgradable() without //notifying sharables. this->m_ctrl.upgradable_in = 0; - --this->m_ctrl.num_upr_shar; + --this->m_ctrl.num_upr_shar; //Execute the second half of exclusive locking this->m_ctrl.exclusive_in = 1; @@ -584,7 +599,7 @@ inline bool interprocess_upgradable_mutex::try_unlock_upgradable_and_lock() } //Now unlock upgradable and mark exclusive this->m_ctrl.upgradable_in = 0; - --this->m_ctrl.num_upr_shar; + --this->m_ctrl.num_upr_shar; this->m_ctrl.exclusive_in = 1; return true; } @@ -592,13 +607,17 @@ inline bool interprocess_upgradable_mutex::try_unlock_upgradable_and_lock() inline bool interprocess_upgradable_mutex::timed_unlock_upgradable_and_lock (const boost::posix_time::ptime &abs_time) { + if(abs_time == boost::posix_time::pos_infin){ + this->unlock_upgradable_and_lock(); + return true; + } scoped_lock_t lock(m_mut, abs_time); if(!lock.owns()) return false; //Simulate unlock_upgradable() without //notifying sharables. this->m_ctrl.upgradable_in = 0; - --this->m_ctrl.num_upr_shar; + --this->m_ctrl.num_upr_shar; //Execute the second half of exclusive locking this->m_ctrl.exclusive_in = 1; @@ -607,7 +626,10 @@ inline bool interprocess_upgradable_mutex::timed_unlock_upgradable_and_lock while (this->m_ctrl.num_upr_shar){ if(!this->m_second_gate.timed_wait(lock, abs_time)){ - return !(this->m_ctrl.num_upr_shar); + if(this->m_ctrl.num_upr_shar){ + return false; + } + break; } } rollback.release(); diff --git a/3party/boost/boost/interprocess/sync/lock_options.hpp b/3party/boost/boost/interprocess/sync/lock_options.hpp index 74f3399a4c..1139d83a19 100644 --- a/3party/boost/boost/interprocess/sync/lock_options.hpp +++ b/3party/boost/boost/interprocess/sync/lock_options.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/mutex_family.hpp b/3party/boost/boost/interprocess/sync/mutex_family.hpp index b153ffea3e..0636de0d44 100644 --- a/3party/boost/boost/interprocess/sync/mutex_family.hpp +++ b/3party/boost/boost/interprocess/sync/mutex_family.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/named_condition.hpp b/3party/boost/boost/interprocess/sync/named_condition.hpp index ca0205ad73..7c570f4baa 100644 --- a/3party/boost/boost/interprocess/sync/named_condition.hpp +++ b/3party/boost/boost/interprocess/sync/named_condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -22,6 +22,7 @@ #include #include #include +#include #if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) #include #define BOOST_INTERPROCESS_USE_WINDOWS @@ -153,24 +154,38 @@ inline void named_condition::notify_all() template inline void named_condition::wait(L& lock) -{ m_cond.wait(lock); } +{ + ipcdetail::internal_mutex_lock internal_lock(lock); + m_cond.wait(internal_lock); +} template inline void named_condition::wait(L& lock, Pr pred) -{ m_cond.wait(lock, pred); } +{ + ipcdetail::internal_mutex_lock internal_lock(lock); + m_cond.wait(internal_lock, pred); +} template inline bool named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time) -{ return m_cond.timed_wait(lock, abs_time); } +{ + ipcdetail::internal_mutex_lock internal_lock(lock); + return m_cond.timed_wait(internal_lock, abs_time); +} template inline bool named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) -{ return m_cond.timed_wait(lock, abs_time, pred); } +{ + ipcdetail::internal_mutex_lock internal_lock(lock); + return m_cond.timed_wait(internal_lock, abs_time, pred); +} inline bool named_condition::remove(const char *name) -{ return condition_type::remove(name); } +{ + return condition_type::remove(name); +} /// @endcond diff --git a/3party/boost/boost/interprocess/sync/named_condition_any.hpp b/3party/boost/boost/interprocess/sync/named_condition_any.hpp new file mode 100644 index 0000000000..f8f204bc19 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/named_condition_any.hpp @@ -0,0 +1,151 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_NAMED_CONDITION_ANY_HPP +#define BOOST_INTERPROCESS_NAMED_CONDITION_ANY_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#if !defined(BOOST_INTERPROCESS_FORCE_GENERIC_EMULATION) && defined (BOOST_INTERPROCESS_WINDOWS) + #include + #define BOOST_INTERPROCESS_USE_WINDOWS +#else + #include +#endif + +//!\file +//!Describes a named condition class for inter-process synchronization + +namespace boost { +namespace interprocess { + +/// @cond +namespace ipcdetail{ class interprocess_tester; } +/// @endcond + +//! A global condition variable that can be created by name. +//! This condition variable is designed to work with named_mutex and +//! can't be placed in shared memory or memory mapped files. +class named_condition_any +{ + /// @cond + //Non-copyable + named_condition_any(); + named_condition_any(const named_condition_any &); + named_condition_any &operator=(const named_condition_any &); + /// @endcond + public: + //!Creates a global condition with a name. + //!If the condition can't be created throws interprocess_exception + named_condition_any(create_only_t, const char *name, const permissions &perm = permissions()) + : m_cond(create_only_t(), name, perm) + {} + + //!Opens or creates a global condition with a name. + //!If the condition is created, this call is equivalent to + //!named_condition_any(create_only_t, ... ) + //!If the condition is already created, this call is equivalent + //!named_condition_any(open_only_t, ... ) + //!Does not throw + named_condition_any(open_or_create_t, const char *name, const permissions &perm = permissions()) + : m_cond(open_or_create_t(), name, perm) + {} + + //!Opens a global condition with a name if that condition is previously + //!created. If it is not previously created this function throws + //!interprocess_exception. + named_condition_any(open_only_t, const char *name) + : m_cond(open_only_t(), name) + {} + + //!Destroys *this and indicates that the calling process is finished using + //!the resource. The destructor function will deallocate + //!any system resources allocated by the system for use by this process for + //!this resource. The resource can still be opened again calling + //!the open constructor overload. To erase the resource from the system + //!use remove(). + ~named_condition_any() + {} + + //!If there is a thread waiting on *this, change that + //!thread's state to ready. Otherwise there is no effect.*/ + void notify_one() + { m_cond.notify_one(); } + + //!Change the state of all threads waiting on *this to ready. + //!If there are no waiting threads, notify_all() has no effect. + void notify_all() + { m_cond.notify_all(); } + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), and then reacquires the lock. + template + void wait(L& lock) + { return m_cond.wait(lock); } + + //!The same as: + //!while (!pred()) wait(lock) + template + void wait(L& lock, Pr pred) + { return m_cond.wait(lock, pred); } + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!and then reacquires the lock. + //!Returns: false if time abs_time is reached, otherwise true. + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { return m_cond.timed_wait(lock, abs_time); } + + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); + //! } return true; + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { return m_cond.timed_wait(lock, abs_time, pred); } + + //!Erases a named condition from the system. + //!Returns false on error. Never throws. + static bool remove(const char *name) + { return condition_any_type::remove(name); } + + /// @cond + private: + #if defined(BOOST_INTERPROCESS_USE_WINDOWS) + typedef ipcdetail::windows_named_condition_any condition_any_type; + #else + typedef ipcdetail::shm_named_condition_any condition_any_type; + #endif + condition_any_type m_cond; + + friend class ipcdetail::interprocess_tester; + void dont_close_on_destruction() + { ipcdetail::interprocess_tester::dont_close_on_destruction(m_cond); } + /// @endcond +}; + +} //namespace interprocess +} //namespace boost + +#include + +#endif // BOOST_INTERPROCESS_NAMED_CONDITION_ANY_HPP diff --git a/3party/boost/boost/interprocess/sync/named_mutex.hpp b/3party/boost/boost/interprocess/sync/named_mutex.hpp index c34193c697..7deb400ab1 100644 --- a/3party/boost/boost/interprocess/sync/named_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/named_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -108,21 +108,20 @@ class named_mutex friend class ipcdetail::interprocess_tester; void dont_close_on_destruction(); + public: #if defined(BOOST_INTERPROCESS_USE_POSIX_SEMAPHORES) - typedef ipcdetail::posix_named_mutex impl_t; - impl_t m_mut; + typedef ipcdetail::posix_named_mutex internal_mutex_type; #undef BOOST_INTERPROCESS_USE_POSIX_SEMAPHORES #elif defined(BOOST_INTERPROCESS_USE_WINDOWS) - typedef ipcdetail::windows_named_mutex impl_t; - impl_t m_mut; + typedef ipcdetail::windows_named_mutex internal_mutex_type; #undef BOOST_INTERPROCESS_USE_WINDOWS #else - typedef ipcdetail::shm_named_mutex impl_t; - impl_t m_mut; - public: - interprocess_mutex *mutex() const - { return m_mut.mutex(); } + typedef ipcdetail::shm_named_mutex internal_mutex_type; #endif + internal_mutex_type &internal_mutex() + { return m_mut; } + + internal_mutex_type m_mut; /// @endcond }; @@ -160,7 +159,7 @@ inline bool named_mutex::timed_lock(const boost::posix_time::ptime &abs_time) { return m_mut.timed_lock(abs_time); } inline bool named_mutex::remove(const char *name) -{ return impl_t::remove(name); } +{ return internal_mutex_type::remove(name); } /// @endcond diff --git a/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp index 2d4b9b2416..5849a92d65 100644 --- a/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/named_recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/named_semaphore.hpp index 39c9096fb6..147724588b 100644 --- a/3party/boost/boost/interprocess/sync/named_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/named_semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp b/3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp new file mode 100644 index 0000000000..fb5790f0f4 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/named_sharable_mutex.hpp @@ -0,0 +1,231 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_NAMED_SHARABLE_MUTEX_HPP +#define BOOST_INTERPROCESS_NAMED_SHARABLE_MUTEX_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//!\file +//!Describes a named sharable mutex class for inter-process synchronization + +namespace boost { +namespace interprocess { + +/// @cond +namespace ipcdetail{ class interprocess_tester; } +/// @endcond + +class named_condition; + +//!A sharable mutex with a global name, so it can be found from different +//!processes. This mutex can't be placed in shared memory, and +//!each process should have it's own named sharable mutex. +class named_sharable_mutex +{ + /// @cond + //Non-copyable + named_sharable_mutex(); + named_sharable_mutex(const named_sharable_mutex &); + named_sharable_mutex &operator=(const named_sharable_mutex &); + /// @endcond + public: + + //!Creates a global sharable mutex with a name. + //!If the sharable mutex can't be created throws interprocess_exception + named_sharable_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); + + //!Opens or creates a global sharable mutex with a name. + //!If the sharable mutex is created, this call is equivalent to + //!named_sharable_mutex(create_only_t, ...) + //!If the sharable mutex is already created, this call is equivalent to + //!named_sharable_mutex(open_only_t, ... ). + named_sharable_mutex(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions()); + + //!Opens a global sharable mutex with a name if that sharable mutex + //!is previously. + //!created. If it is not previously created this function throws + //!interprocess_exception. + named_sharable_mutex(open_only_t open_only, const char *name); + + //!Destroys *this and indicates that the calling process is finished using + //!the resource. The destructor function will deallocate + //!any system resources allocated by the system for use by this process for + //!this resource. The resource can still be opened again calling + //!the open constructor overload. To erase the resource from the system + //!use remove(). + ~named_sharable_mutex(); + + //Exclusive locking + + //!Effects: The calling thread tries to obtain exclusive ownership of the mutex, + //! and if another thread has exclusive or sharable ownership of + //! the mutex, it waits until it can obtain the ownership. + //!Throws: interprocess_exception on error. + void lock(); + + //!Effects: The calling thread tries to acquire exclusive ownership of the mutex + //! without waiting. If no other thread has exclusive or sharable + //! ownership of the mutex this succeeds. + //!Returns: If it can acquire exclusive ownership immediately returns true. + //! If it has to wait, returns false. + //!Throws: interprocess_exception on error. + bool try_lock(); + + //!Effects: The calling thread tries to acquire exclusive ownership of the mutex + //! waiting if necessary until no other thread has exclusive, or sharable + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires exclusive ownership, returns true. Otherwise returns false. + //!Throws: interprocess_exception on error. + bool timed_lock(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have exclusive ownership of the mutex. + //!Effects: The calling thread releases the exclusive ownership of the mutex. + //!Throws: An exception derived from interprocess_exception on error. + void unlock(); + + //Sharable locking + + //!Effects: The calling thread tries to obtain sharable ownership of the mutex, + //! and if another thread has exclusive ownership of the mutex, + //! waits until it can obtain the ownership. + //!Throws: interprocess_exception on error. + void lock_sharable(); + + //!Effects: The calling thread tries to acquire sharable ownership of the mutex + //! without waiting. If no other thread has exclusive ownership + //! of the mutex this succeeds. + //!Returns: If it can acquire sharable ownership immediately returns true. If it + //! has to wait, returns false. + //!Throws: interprocess_exception on error. + bool try_lock_sharable(); + + //!Effects: The calling thread tries to acquire sharable ownership of the mutex + //! waiting if necessary until no other thread has exclusive + //! ownership of the mutex or abs_time is reached. + //!Returns: If acquires sharable ownership, returns true. Otherwise returns false. + //!Throws: interprocess_exception on error. + bool timed_lock_sharable(const boost::posix_time::ptime &abs_time); + + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The calling thread releases the sharable ownership of the mutex. + //!Throws: An exception derived from interprocess_exception on error. + void unlock_sharable(); + + //!Erases a named sharable mutex from the system. + //!Returns false on error. Never throws. + static bool remove(const char *name); + + /// @cond + private: + friend class ipcdetail::interprocess_tester; + void dont_close_on_destruction(); + + interprocess_sharable_mutex *mutex() const + { return static_cast(m_shmem.get_user_address()); } + + ipcdetail::managed_open_or_create_impl m_shmem; + typedef ipcdetail::named_creation_functor construct_func_t; + /// @endcond +}; + +/// @cond + +inline named_sharable_mutex::~named_sharable_mutex() +{} + +inline named_sharable_mutex::named_sharable_mutex + (create_only_t, const char *name, const permissions &perm) + : m_shmem (create_only + ,name + ,sizeof(interprocess_sharable_mutex) + + ipcdetail::managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoCreate) + ,perm) +{} + +inline named_sharable_mutex::named_sharable_mutex + (open_or_create_t, const char *name, const permissions &perm) + : m_shmem (open_or_create + ,name + ,sizeof(interprocess_sharable_mutex) + + ipcdetail::managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoOpenOrCreate) + ,perm) +{} + +inline named_sharable_mutex::named_sharable_mutex + (open_only_t, const char *name) + : m_shmem (open_only + ,name + ,read_write + ,0 + ,construct_func_t(ipcdetail::DoOpen)) +{} + +inline void named_sharable_mutex::dont_close_on_destruction() +{ ipcdetail::interprocess_tester::dont_close_on_destruction(m_shmem); } + +inline void named_sharable_mutex::lock() +{ this->mutex()->lock(); } + +inline void named_sharable_mutex::unlock() +{ this->mutex()->unlock(); } + +inline bool named_sharable_mutex::try_lock() +{ return this->mutex()->try_lock(); } + +inline bool named_sharable_mutex::timed_lock + (const boost::posix_time::ptime &abs_time) +{ return this->mutex()->timed_lock(abs_time); } + +inline void named_sharable_mutex::lock_sharable() +{ this->mutex()->lock_sharable(); } + +inline void named_sharable_mutex::unlock_sharable() +{ this->mutex()->unlock_sharable(); } + +inline bool named_sharable_mutex::try_lock_sharable() +{ return this->mutex()->try_lock_sharable(); } + +inline bool named_sharable_mutex::timed_lock_sharable + (const boost::posix_time::ptime &abs_time) +{ return this->mutex()->timed_lock_sharable(abs_time); } + +inline bool named_sharable_mutex::remove(const char *name) +{ return shared_memory_object::remove(name); } + +/// @endcond + +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_NAMED_SHARABLE_MUTEX_HPP diff --git a/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp index c45fd08270..d75f706cad 100644 --- a/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/named_upgradable_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -56,7 +56,7 @@ class named_upgradable_mutex //!If the upgradable mutex can't be created throws interprocess_exception named_upgradable_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions()); - //!Opens or creates a global upgradable mutex with a name, and an initial count. + //!Opens or creates a global upgradable mutex with a name. //!If the upgradable mutex is created, this call is equivalent to //!named_upgradable_mutex(create_only_t, ...) //!If the upgradable mutex is already created, this call is equivalent to @@ -215,6 +215,12 @@ class named_upgradable_mutex //!Throws: An exception derived from interprocess_exception on error. bool try_unlock_sharable_and_lock(); + //!Precondition: The thread must have sharable ownership of the mutex. + //!Effects: The thread atomically releases sharable ownership and tries to acquire + //! upgradable ownership. This operation will fail if there are threads with sharable + //! or upgradable ownership, but it will maintain sharable ownership. + //!Returns: If acquires upgradable ownership, returns true. Otherwise returns false. + //!Throws: An exception derived from interprocess_exception on error. bool try_unlock_sharable_and_lock_upgradable(); //!Erases a named upgradable mutex from the system. @@ -288,13 +294,7 @@ inline bool named_upgradable_mutex::try_lock() inline bool named_upgradable_mutex::timed_lock (const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->lock(); - return true; - } - return this->mutex()->timed_lock(abs_time); -} +{ return this->mutex()->timed_lock(abs_time); } inline void named_upgradable_mutex::lock_upgradable() { this->mutex()->lock_upgradable(); } @@ -307,13 +307,7 @@ inline bool named_upgradable_mutex::try_lock_upgradable() inline bool named_upgradable_mutex::timed_lock_upgradable (const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->lock_upgradable(); - return true; - } - return this->mutex()->timed_lock_upgradable(abs_time); -} +{ return this->mutex()->timed_lock_upgradable(abs_time); } inline void named_upgradable_mutex::lock_sharable() { this->mutex()->lock_sharable(); } @@ -326,13 +320,7 @@ inline bool named_upgradable_mutex::try_lock_sharable() inline bool named_upgradable_mutex::timed_lock_sharable (const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->lock_sharable(); - return true; - } - return this->mutex()->timed_lock_sharable(abs_time); -} +{ return this->mutex()->timed_lock_sharable(abs_time); } inline void named_upgradable_mutex::unlock_and_lock_upgradable() { this->mutex()->unlock_and_lock_upgradable(); } diff --git a/3party/boost/boost/interprocess/sync/null_mutex.hpp b/3party/boost/boost/interprocess/sync/null_mutex.hpp index afe444ed3f..d9f69a6959 100644 --- a/3party/boost/boost/interprocess/sync/null_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/null_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/posix/condition.hpp b/3party/boost/boost/interprocess/sync/posix/condition.hpp index 48be099f60..2deea0f71d 100644 --- a/3party/boost/boost/interprocess/sync/posix/condition.hpp +++ b/3party/boost/boost/interprocess/sync/posix/condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include @@ -145,21 +145,21 @@ inline posix_condition::~posix_condition() { int res = 0; res = pthread_cond_destroy(&m_condition); - BOOST_ASSERT(res == 0); + BOOST_ASSERT(res == 0); (void)res; } inline void posix_condition::notify_one() { int res = 0; res = pthread_cond_signal(&m_condition); - BOOST_ASSERT(res == 0); + BOOST_ASSERT(res == 0); (void)res; } inline void posix_condition::notify_all() { int res = 0; res = pthread_cond_broadcast(&m_condition); - BOOST_ASSERT(res == 0); + BOOST_ASSERT(res == 0); (void)res; } inline void posix_condition::do_wait(posix_mutex &mut) @@ -167,7 +167,7 @@ inline void posix_condition::do_wait(posix_mutex &mut) pthread_mutex_t* pmutex = &mut.m_mut; int res = 0; res = pthread_cond_wait(&m_condition, pmutex); - BOOST_ASSERT(res == 0); + BOOST_ASSERT(res == 0); (void)res; } inline bool posix_condition::do_timed_wait diff --git a/3party/boost/boost/interprocess/sync/posix/mutex.hpp b/3party/boost/boost/interprocess/sync/posix/mutex.hpp index 393807c97a..344c5e90af 100644 --- a/3party/boost/boost/interprocess/sync/posix/mutex.hpp +++ b/3party/boost/boost/interprocess/sync/posix/mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include #include @@ -140,6 +140,7 @@ inline void posix_mutex::unlock() { int res = 0; res = pthread_mutex_unlock(&m_mut); + (void)res; BOOST_ASSERT(res == 0); } diff --git a/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp b/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp index 931c731eff..1b03b7def8 100644 --- a/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/posix/named_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp index f0327a4618..0b7ca8bba1 100644 --- a/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/posix/named_semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp b/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp index bcbc44be33..9e989d58b9 100644 --- a/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp +++ b/3party/boost/boost/interprocess/sync/posix/pthread_helpers.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -19,8 +19,8 @@ #include #include -#include -#include +#include +#include namespace boost { namespace interprocess { @@ -86,7 +86,7 @@ namespace ipcdetail{ void release() {mp_mut = 0; } - private: + private: pthread_mutex_t *mp_mut; }; @@ -105,7 +105,7 @@ namespace ipcdetail{ void release() { mp_cond = 0; } - private: + private: pthread_cond_t *mp_cond; }; @@ -151,7 +151,7 @@ namespace ipcdetail{ void release() {mp_barrier = 0; } - private: + private: pthread_barrier_t *mp_barrier; }; diff --git a/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp b/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp index 7d787353bd..3e20dc7076 100644 --- a/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp +++ b/3party/boost/boost/interprocess/sync/posix/ptime_to_timespec.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp index 456c9a4874..385d714fb1 100644 --- a/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/posix/recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include #include @@ -130,7 +130,7 @@ inline void posix_recursive_mutex::unlock() { int res = 0; res = pthread_mutex_unlock(&m_mut); - BOOST_ASSERT(res == 0); + BOOST_ASSERT(res == 0); (void)res; } } //namespace ipcdetail { diff --git a/3party/boost/boost/interprocess/sync/posix/semaphore.hpp b/3party/boost/boost/interprocess/sync/posix/semaphore.hpp index b7f62cc42d..5d7dfa8d6a 100644 --- a/3party/boost/boost/interprocess/sync/posix/semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/posix/semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp b/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp index 22184cda9d..f6aef56ea2 100644 --- a/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp +++ b/3party/boost/boost/interprocess/sync/posix/semaphore_wrapper.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -103,7 +103,7 @@ inline bool semaphore_open inline void semaphore_close(sem_t *handle) { int ret = sem_close(handle); - if(ret != 0){ + if(ret != 0){ BOOST_ASSERT(0); } } @@ -138,7 +138,7 @@ inline void semaphore_init(sem_t *handle, unsigned int initialCount) inline void semaphore_destroy(sem_t *handle) { int ret = sem_destroy(handle); - if(ret != 0){ + if(ret != 0){ BOOST_ASSERT(0); } } diff --git a/3party/boost/boost/interprocess/sync/scoped_lock.hpp b/3party/boost/boost/interprocess/sync/scoped_lock.hpp index 61fe93e5b3..5709f6ff61 100644 --- a/3party/boost/boost/interprocess/sync/scoped_lock.hpp +++ b/3party/boost/boost/interprocess/sync/scoped_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -157,7 +157,7 @@ class scoped_lock //! a)if try_unlock_upgradable_and_lock() returns true then mutex() obtains //! the value from upgr.release() and owns() is set to true. //! b)if try_unlock_upgradable_and_lock() returns false then upgr is - //! unaffected and this scoped_lock construction as the same effects as + //! unaffected and this scoped_lock construction as the same effects as //! a default construction. //! c)Else upgr.owns() is false. mutex() obtains the value from upgr.release() //! and owns() is set to false @@ -259,7 +259,7 @@ class scoped_lock //! mutex after the assignment (and scop will not), but the mutex's lock //! count will be decremented by one. scoped_lock &operator=(BOOST_RV_REF(scoped_lock) scop) - { + { if(this->owns()) this->unlock(); m_locked = scop.owns(); diff --git a/3party/boost/boost/interprocess/sync/sharable_lock.hpp b/3party/boost/boost/interprocess/sync/sharable_lock.hpp index 9342e45a46..113019572c 100644 --- a/3party/boost/boost/interprocess/sync/sharable_lock.hpp +++ b/3party/boost/boost/interprocess/sync/sharable_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -189,7 +189,7 @@ class sharable_lock //! before the assignment. In this case, this will own the mutex after the assignment //! (and upgr will not), but the mutex's lock count will be decremented by one. sharable_lock &operator=(BOOST_RV_REF(sharable_lock) upgr) - { + { if(this->owns()) this->unlock(); m_locked = upgr.owns(); @@ -203,7 +203,7 @@ class sharable_lock //!Notes: The sharable_lock changes from a state of not owning the //! mutex, to owning the mutex, blocking if necessary. void lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); mp_mutex->lock_sharable(); @@ -219,7 +219,7 @@ class sharable_lock //! mutex_type does not support try_lock_sharable(), this function will //! fail at compile time if instantiated, but otherwise have no effect. bool try_lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->try_lock_sharable(); @@ -236,7 +236,7 @@ class sharable_lock //! timed_lock_sharable(), this function will fail at compile time if //! instantiated, but otherwise have no effect. bool timed_lock(const boost::posix_time::ptime& abs_time) - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->timed_lock_sharable(abs_time); diff --git a/3party/boost/boost/interprocess/sync/shm/named_condition.hpp b/3party/boost/boost/interprocess/sync/shm/named_condition.hpp index 9d7cd77e11..a31b5b332b 100644 --- a/3party/boost/boost/interprocess/sync/shm/named_condition.hpp +++ b/3party/boost/boost/interprocess/sync/shm/named_condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -29,8 +29,11 @@ #include #include #if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) -#include -#include + #include + #include + #include +#else + #include #endif @@ -122,106 +125,35 @@ class shm_named_condition /// @cond private: - struct condition_holder - { - interprocess_condition cond_; - //If named_mutex is implemented using semaphores - //we need to store an additional mutex - #if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - interprocess_mutex mutex_; - #endif - }; - - interprocess_condition *condition() const - { return &static_cast(m_shmem.get_user_address())->cond_; } - - template - class lock_inverter - { - Lock &l_; - public: - lock_inverter(Lock &l) - : l_(l) - {} - void lock() { l_.unlock(); } - void unlock() { l_.lock(); } - }; - - //If named mutex uses POSIX semaphores, then the shm based condition variable - //must use it's internal lock to wait, as sem_t does not store a pthread_mutex_t - //instance needed by pthread_mutex_cond_t #if defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - interprocess_mutex *mutex() const - { return &static_cast(m_shmem.get_user_address())->mutex_; } + class internal_condition_members + { + public: + typedef interprocess_mutex mutex_type; + typedef interprocess_condition condvar_type; + + condvar_type& get_condvar() { return m_cond; } + mutex_type& get_mutex() { return m_mtx; } - template - void do_wait(Lock& lock) - { - //shm_named_condition only works with named_mutex - BOOST_STATIC_ASSERT((is_convertible::value == true)); - - //lock internal before unlocking external to avoid race with a notifier - scoped_lock internal_lock(*this->mutex()); - lock_inverter inverted_lock(lock); - scoped_lock > external_unlock(inverted_lock); + private: + mutex_type m_mtx; + condvar_type m_cond; + }; - //unlock internal first to avoid deadlock with near simultaneous waits - scoped_lock internal_unlock; - internal_lock.swap(internal_unlock); - this->condition()->wait(internal_unlock); - } - - template - bool do_timed_wait(Lock& lock, const boost::posix_time::ptime &abs_time) - { - //shm_named_condition only works with named_mutex - BOOST_STATIC_ASSERT((is_convertible::value == true)); - //lock internal before unlocking external to avoid race with a notifier - scoped_lock internal_lock(*this->mutex(), abs_time); - if(!internal_lock) return false; - lock_inverter inverted_lock(lock); - scoped_lock > external_unlock(inverted_lock); - - //unlock internal first to avoid deadlock with near simultaneous waits - scoped_lock internal_unlock; - internal_lock.swap(internal_unlock); - return this->condition()->timed_wait(internal_unlock, abs_time); - } - #else //defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) - template - class lock_wrapper - { - typedef void (lock_wrapper::*unspecified_bool_type)(); - public: - - typedef interprocess_mutex mutex_type; - - lock_wrapper(Lock &l) - : l_(l) - {} - - mutex_type* mutex() const - { return l_.mutex()->mutex(); } - - void lock() { l_.lock(); } - - void unlock() { l_.unlock(); } - - operator unspecified_bool_type() const - { return l_ ? &lock_wrapper::lock : 0; } - - private: - Lock &l_; - }; + typedef ipcdetail::condition_any_wrapper internal_condition; + #else //defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) + typedef interprocess_condition internal_condition; #endif //defined (BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) + internal_condition m_cond; + friend class boost::interprocess::ipcdetail::interprocess_tester; void dont_close_on_destruction(); managed_open_or_create_impl m_shmem; template friend class boost::interprocess::ipcdetail::named_creation_functor; - typedef boost::interprocess::ipcdetail::named_creation_functor construct_func_t; + typedef boost::interprocess::ipcdetail::named_creation_functor construct_func_t; /// @endcond }; @@ -233,7 +165,7 @@ inline shm_named_condition::~shm_named_condition() inline shm_named_condition::shm_named_condition(create_only_t, const char *name, const permissions &perm) : m_shmem (create_only ,name - ,sizeof(condition_holder) + + ,sizeof(internal_condition) + managed_open_or_create_impl:: ManagedOpenOrCreateUserOffset ,read_write @@ -245,7 +177,7 @@ inline shm_named_condition::shm_named_condition(create_only_t, const char *name, inline shm_named_condition::shm_named_condition(open_or_create_t, const char *name, const permissions &perm) : m_shmem (open_or_create ,name - ,sizeof(condition_holder) + + ,sizeof(internal_condition) + managed_open_or_create_impl:: ManagedOpenOrCreateUserOffset ,read_write @@ -268,102 +200,65 @@ inline void shm_named_condition::dont_close_on_destruction() #if defined(BOOST_INTERPROCESS_NAMED_MUTEX_USES_POSIX_SEMAPHORES) inline void shm_named_condition::notify_one() -{ - scoped_lock internal_lock(*this->mutex()); - this->condition()->notify_one(); -} +{ m_cond.notify_one(); } inline void shm_named_condition::notify_all() -{ - scoped_lock internal_lock(*this->mutex()); - this->condition()->notify_all(); -} +{ m_cond.notify_all(); } template inline void shm_named_condition::wait(L& lock) -{ - if (!lock) - throw lock_exception(); - this->do_wait(lock); -} +{ m_cond.wait(lock); } template inline void shm_named_condition::wait(L& lock, Pr pred) -{ - if (!lock) - throw lock_exception(); - while (!pred()) - this->do_wait(lock); -} +{ m_cond.wait(lock, pred); } template inline bool shm_named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock); - return true; - } - if (!lock) - throw lock_exception(); - return this->do_timed_wait(lock, abs_time); -} +{ return m_cond.timed_wait(lock, abs_time); } template inline bool shm_named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock, pred); - return true; - } - if (!lock) - throw lock_exception(); - - while (!pred()){ - if(!this->do_timed_wait(lock, abs_time)){ - return pred(); - } - } - return true; -} +{ return m_cond.timed_wait(lock, abs_time, pred); } #else inline void shm_named_condition::notify_one() -{ this->condition()->notify_one(); } +{ m_cond.notify_one(); } inline void shm_named_condition::notify_all() -{ this->condition()->notify_all(); } +{ m_cond.notify_all(); } template inline void shm_named_condition::wait(L& lock) { - lock_wrapper newlock(lock); - this->condition()->wait(newlock); + internal_mutex_lock internal_lock(lock); + m_cond.wait(internal_lock); } template inline void shm_named_condition::wait(L& lock, Pr pred) { - lock_wrapper newlock(lock); - this->condition()->wait(newlock, pred); + internal_mutex_lock internal_lock(lock); + m_cond.wait(internal_lock, pred); } template inline bool shm_named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time) { - lock_wrapper newlock(lock); - return this->condition()->timed_wait(newlock, abs_time); + internal_mutex_lock internal_lock(lock); + return m_cond.timed_wait(internal_lock, abs_time); } template inline bool shm_named_condition::timed_wait (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) { - lock_wrapper newlock(lock); - return this->condition()->timed_wait(newlock, abs_time, pred); + internal_mutex_lock internal_lock(lock); + return m_cond.timed_wait(internal_lock, abs_time, pred); } #endif diff --git a/3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp b/3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp new file mode 100644 index 0000000000..74692ea9e5 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/shm/named_condition_any.hpp @@ -0,0 +1,192 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2005-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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_SHM_NAMED_CONDITION_ANY_HPP +#define BOOST_INTERPROCESS_SHM_NAMED_CONDITION_ANY_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//!\file +//!Describes process-shared variables interprocess_condition class + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +/// @cond +class interprocess_tester; +/// @endcond + +//! A global condition variable that can be created by name. +//! This condition variable is designed to work with named_mutex and +//! can't be placed in shared memory or memory mapped files. +class shm_named_condition_any +{ + /// @cond + //Non-copyable + shm_named_condition_any(); + shm_named_condition_any(const shm_named_condition_any &); + shm_named_condition_any &operator=(const shm_named_condition_any &); + /// @endcond + public: + //!Creates a global condition with a name. + //!If the condition can't be created throws interprocess_exception + shm_named_condition_any(create_only_t create_only, const char *name, const permissions &perm = permissions()) + : m_shmem (create_only + ,name + ,sizeof(internal_condition) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoCreate) + ,perm) + {} + + //!Opens or creates a global condition with a name. + //!If the condition is created, this call is equivalent to + //!shm_named_condition_any(create_only_t, ... ) + //!If the condition is already created, this call is equivalent + //!shm_named_condition_any(open_only_t, ... ) + //!Does not throw + shm_named_condition_any(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions()) + : m_shmem (open_or_create + ,name + ,sizeof(internal_condition) + + managed_open_or_create_impl:: + ManagedOpenOrCreateUserOffset + ,read_write + ,0 + ,construct_func_t(DoOpenOrCreate) + ,perm) + {} + + //!Opens a global condition with a name if that condition is previously + //!created. If it is not previously created this function throws + //!interprocess_exception. + shm_named_condition_any(open_only_t open_only, const char *name) + : m_shmem (open_only + ,name + ,read_write + ,0 + ,construct_func_t(DoOpen)) + {} + + //!Destroys *this and indicates that the calling process is finished using + //!the resource. The destructor function will deallocate + //!any system resources allocated by the system for use by this process for + //!this resource. The resource can still be opened again calling + //!the open constructor overload. To erase the resource from the system + //!use remove(). + ~shm_named_condition_any() + {} + + //!If there is a thread waiting on *this, change that + //!thread's state to ready. Otherwise there is no effect.*/ + void notify_one() + { m_cond.notify_one(); } + + //!Change the state of all threads waiting on *this to ready. + //!If there are no waiting threads, notify_all() has no effect. + void notify_all() + { m_cond.notify_all(); } + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), and then reacquires the lock. + template + void wait(L& lock) + { m_cond.wait(lock); } + + //!The same as: + //!while (!pred()) wait(lock) + template + void wait(L& lock, Pr pred) + { m_cond.wait(lock, pred); } + + //!Releases the lock on the named_mutex object associated with lock, blocks + //!the current thread of execution until readied by a call to + //!this->notify_one() or this->notify_all(), or until time abs_time is reached, + //!and then reacquires the lock. + //!Returns: false if time abs_time is reached, otherwise true. + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { return m_cond.timed_wait(lock, abs_time); } + + //!The same as: while (!pred()) { + //! if (!timed_wait(lock, abs_time)) return pred(); + //! } return true; + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { return m_cond.timed_wait(lock, abs_time, pred); } + + //!Erases a named condition from the system. + //!Returns false on error. Never throws. + static bool remove(const char *name) + { return shared_memory_object::remove(name); } + + /// @cond + private: + + class internal_condition_members + { + public: + typedef interprocess_mutex mutex_type; + typedef interprocess_condition condvar_type; + + condvar_type& get_condvar() { return m_cond; } + mutex_type& get_mutex() { return m_mtx; } + + private: + mutex_type m_mtx; + condvar_type m_cond; + }; + + typedef ipcdetail::condition_any_wrapper internal_condition; + + internal_condition m_cond; + + friend class boost::interprocess::ipcdetail::interprocess_tester; + void dont_close_on_destruction() + { interprocess_tester::dont_close_on_destruction(m_shmem); } + + managed_open_or_create_impl m_shmem; + + template friend class boost::interprocess::ipcdetail::named_creation_functor; + typedef boost::interprocess::ipcdetail::named_creation_functor construct_func_t; + /// @endcond +}; + +} //namespace ipcdetail +} //namespace interprocess +} //namespace boost + +#include + +#endif // BOOST_INTERPROCESS_SHM_NAMED_CONDITION_ANY_HPP diff --git a/3party/boost/boost/interprocess/sync/shm/named_creation_functor.hpp b/3party/boost/boost/interprocess/sync/shm/named_creation_functor.hpp index 9d752c837a..ec28c8e782 100644 --- a/3party/boost/boost/interprocess/sync/shm/named_creation_functor.hpp +++ b/3party/boost/boost/interprocess/sync/shm/named_creation_functor.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2007-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2007-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) // @@ -38,7 +38,7 @@ class named_creation_functor { new(address)T(m_arg); } bool operator()(void *address, std::size_t, bool created) const - { + { switch(m_creation_type){ case DoOpen: return true; diff --git a/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp b/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp index f32fa70044..ad4b215d24 100644 --- a/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/shm/named_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -100,8 +100,9 @@ class shm_named_mutex static bool remove(const char *name); /// @cond - interprocess_mutex *mutex() const - { return static_cast(m_shmem.get_user_address()); } + typedef interprocess_mutex internal_mutex_type; + interprocess_mutex &internal_mutex() + { return *static_cast(m_shmem.get_user_address()); } private: friend class ipcdetail::interprocess_tester; @@ -153,13 +154,13 @@ inline shm_named_mutex::shm_named_mutex(open_only_t, const char *name) {} inline void shm_named_mutex::lock() -{ this->mutex()->lock(); } +{ this->internal_mutex().lock(); } inline void shm_named_mutex::unlock() -{ this->mutex()->unlock(); } +{ this->internal_mutex().unlock(); } inline bool shm_named_mutex::try_lock() -{ return this->mutex()->try_lock(); } +{ return this->internal_mutex().try_lock(); } inline bool shm_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time) { @@ -167,7 +168,7 @@ inline bool shm_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time this->lock(); return true; } - return this->mutex()->timed_lock(abs_time); + return this->internal_mutex().timed_lock(abs_time); } inline bool shm_named_mutex::remove(const char *name) diff --git a/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp index 7235571254..28da749980 100644 --- a/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/shm/named_recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp b/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp index c6d3830db5..14034c229f 100644 --- a/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/shm/named_semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp b/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp index 0975a6ed2b..191a6b675f 100644 --- a/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/shm/named_upgradable_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/spin/condition.hpp b/3party/boost/boost/interprocess/sync/spin/condition.hpp index 55dd79b406..7c3306d09f 100644 --- a/3party/boost/boost/interprocess/sync/spin/condition.hpp +++ b/3party/boost/boost/interprocess/sync/spin/condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -110,7 +110,7 @@ inline spin_condition::spin_condition() } inline spin_condition::~spin_condition() -{ +{ //Trivial destructor } @@ -171,7 +171,7 @@ inline bool spin_condition::do_timed_wait(bool tout_enabled, InterprocessMutex &mut) { boost::posix_time::ptime now = microsec_clock::universal_time(); - + if(tout_enabled){ if(now >= abs_time) return false; } @@ -205,7 +205,7 @@ inline bool spin_condition::do_timed_wait(bool tout_enabled, //By default, we suppose that no timeout has happened bool timed_out = false, unlock_enter_mut= false; - + //Loop until a notification indicates that the thread should //exit or timeout occurs while(1){ @@ -253,7 +253,7 @@ inline bool spin_condition::do_timed_wait(bool tout_enabled, continue; } else if(result == NOTIFY_ONE){ - //If it was a NOTIFY_ONE command, only this thread should + //If it was a NOTIFY_ONE command, only this thread should //exit. This thread has atomically marked command as sleep before //so no other thread will exit. //Decrement wait count. diff --git a/3party/boost/boost/interprocess/sync/spin/mutex.hpp b/3party/boost/boost/interprocess/sync/spin/mutex.hpp index 926f7237c0..94c26a16ad 100644 --- a/3party/boost/boost/interprocess/sync/spin/mutex.hpp +++ b/3party/boost/boost/interprocess/sync/spin/mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -73,7 +73,7 @@ inline void spin_mutex::lock(void) inline bool spin_mutex::try_lock(void) { - boost::uint32_t prev_s = ipcdetail::atomic_cas32(const_cast(&m_s), 1, 0); + boost::uint32_t prev_s = ipcdetail::atomic_cas32(const_cast(&m_s), 1, 0); return m_s == 1 && prev_s == 0; } diff --git a/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp index a763f9c72d..38e9dcaa10 100644 --- a/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/spin/recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/spin/semaphore.hpp b/3party/boost/boost/interprocess/sync/spin/semaphore.hpp index 1b8cac35aa..a5ba3b1b13 100644 --- a/3party/boost/boost/interprocess/sync/spin/semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/spin/semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/upgradable_lock.hpp b/3party/boost/boost/interprocess/sync/upgradable_lock.hpp index fb86374ca1..6b766fd679 100644 --- a/3party/boost/boost/interprocess/sync/upgradable_lock.hpp +++ b/3party/boost/boost/interprocess/sync/upgradable_lock.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -207,7 +207,7 @@ class upgradable_lock //!Notes: The sharable_lock changes from a state of not owning the mutex, //! to owning the mutex, blocking if necessary. void lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); mp_mutex->lock_upgradable(); @@ -223,7 +223,7 @@ class upgradable_lock //! mutex_type does not support try_lock_upgradable(), this function will //! fail at compile time if instantiated, but otherwise have no effect. bool try_lock() - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->try_lock_upgradable(); @@ -240,7 +240,7 @@ class upgradable_lock //! timed_lock_upgradable(abs_time), this function will fail at compile //! time if instantiated, but otherwise have no effect. bool timed_lock(const boost::posix_time::ptime& abs_time) - { + { if(!mp_mutex || m_locked) throw lock_exception(); m_locked = mp_mutex->timed_lock_upgradable(abs_time); diff --git a/3party/boost/boost/interprocess/sync/windows/condition.hpp b/3party/boost/boost/interprocess/sync/windows/condition.hpp index 9695c21044..6277951720 100644 --- a/3party/boost/boost/interprocess/sync/windows/condition.hpp +++ b/3party/boost/boost/interprocess/sync/windows/condition.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -33,63 +33,34 @@ class windows_condition windows_condition &operator=(const windows_condition &); public: - windows_condition(); - ~windows_condition(); + windows_condition() + : m_condition_data() + {} - void notify_one(); - void notify_all(); + ~windows_condition() + {} + + void notify_one() + { m_condition_data.notify_one(); } + + void notify_all() + { m_condition_data.notify_all(); } template bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) - { - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock); - return true; - } - if (!lock) - throw lock_exception(); - return this->do_timed_wait(abs_time, *lock.mutex()); - } + { return m_condition_data.timed_wait(lock, abs_time); } template bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) - { - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock, pred); - return true; - } - if (!lock) - throw lock_exception(); - while (!pred()){ - if (!this->do_timed_wait(abs_time, *lock.mutex())) - return pred(); - } - return true; - } + { return m_condition_data.timed_wait(lock, abs_time, pred); } template void wait(L& lock) - { - if (!lock) - throw lock_exception(); - do_wait(*lock.mutex()); - } + { m_condition_data.wait(lock); } template void wait(L& lock, Pr pred) - { - if (!lock) - throw lock_exception(); - - while (!pred()) - do_wait(*lock.mutex()); - } - - template - void do_wait(InterprocessMutex &mut); - - template - bool do_timed_wait(const boost::posix_time::ptime &abs_time, InterprocessMutex &mut); + { m_condition_data.wait(lock, pred); } private: @@ -132,33 +103,11 @@ class windows_condition windows_semaphore m_sem_block_queue; windows_semaphore m_sem_block_lock; windows_mutex m_mtx_unblock_lock; - } m_condition_data; + }; - typedef condition_algorithm_8a algorithm_type; + ipcdetail::condition_8a_wrapper m_condition_data; }; -inline windows_condition::windows_condition() - : m_condition_data() -{} - -inline windows_condition::~windows_condition() -{} - -inline void windows_condition::notify_one() -{ algorithm_type::signal(m_condition_data, false); } - -inline void windows_condition::notify_all() -{ algorithm_type::signal(m_condition_data, true); } - -template -inline void windows_condition::do_wait(InterprocessMutex &mut) -{ algorithm_type::wait(m_condition_data, false, boost::posix_time::ptime(), mut); } - -template -inline bool windows_condition::do_timed_wait - (const boost::posix_time::ptime &abs_time, InterprocessMutex &mut) -{ return algorithm_type::wait(m_condition_data, true, abs_time, mut); } - } //namespace ipcdetail } //namespace interprocess } //namespace boost diff --git a/3party/boost/boost/interprocess/sync/windows/mutex.hpp b/3party/boost/boost/interprocess/sync/windows/mutex.hpp index 477acd396a..7da70f4d53 100644 --- a/3party/boost/boost/interprocess/sync/windows/mutex.hpp +++ b/3party/boost/boost/interprocess/sync/windows/mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/windows/named_condition.hpp b/3party/boost/boost/interprocess/sync/windows/named_condition.hpp index 403e826178..4724482341 100644 --- a/3party/boost/boost/interprocess/sync/windows/named_condition.hpp +++ b/3party/boost/boost/interprocess/sync/windows/named_condition.hpp @@ -17,313 +17,13 @@ #include #include -#include -#include -#include -#include -#include -#include -#include +#include namespace boost { namespace interprocess { namespace ipcdetail { -class windows_named_condition -{ - /// @cond - - //Non-copyable - windows_named_condition(); - windows_named_condition(const windows_named_condition &); - windows_named_condition &operator=(const windows_named_condition &); - /// @endcond - - public: - windows_named_condition(create_only_t, const char *name, const permissions &perm = permissions()); - - windows_named_condition(open_or_create_t, const char *name, const permissions &perm = permissions()); - - windows_named_condition(open_only_t, const char *name); - - ~windows_named_condition(); - - //!If there is a thread waiting on *this, change that - //!thread's state to ready. Otherwise there is no effect.*/ - void notify_one(); - - //!Change the state of all threads waiting on *this to ready. - //!If there are no waiting threads, notify_all() has no effect. - void notify_all(); - - //!Releases the lock on the named_mutex object associated with lock, blocks - //!the current thread of execution until readied by a call to - //!this->notify_one() or this->notify_all(), and then reacquires the lock. - template - void wait(L& lock); - - //!The same as: - //!while (!pred()) wait(lock) - template - void wait(L& lock, Pr pred); - - //!Releases the lock on the named_mutex object associated with lock, blocks - //!the current thread of execution until readied by a call to - //!this->notify_one() or this->notify_all(), or until time abs_time is reached, - //!and then reacquires the lock. - //!Returns: false if time abs_time is reached, otherwise true. - template - bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time); - - //!The same as: while (!pred()) { - //! if (!timed_wait(lock, abs_time)) return pred(); - //! } return true; - template - bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred); - - static bool remove(const char *name); - - /// @cond - private: - friend class interprocess_tester; - void dont_close_on_destruction(); - - template - void do_wait(InterprocessMutex& lock); - - template - bool do_timed_wait(const boost::posix_time::ptime &abs_time, InterprocessMutex& lock); - - struct condition_data - { - typedef boost::int32_t integer_type; - typedef winapi_semaphore_wrapper semaphore_type; - typedef winapi_mutex_wrapper mutex_type; - - integer_type &get_nwaiters_blocked() - { return m_nwaiters_blocked; } - - integer_type &get_nwaiters_gone() - { return m_nwaiters_gone; } - - integer_type &get_nwaiters_to_unblock() - { return m_nwaiters_to_unblock; } - - semaphore_type &get_sem_block_queue() - { return m_sem_block_queue; } - - semaphore_type &get_sem_block_lock() - { return m_sem_block_lock; } - - mutex_type &get_mtx_unblock_lock() - { return m_mtx_unblock_lock; } - - integer_type m_nwaiters_blocked; - integer_type m_nwaiters_gone; - integer_type m_nwaiters_to_unblock; - winapi_semaphore_wrapper m_sem_block_queue; - winapi_semaphore_wrapper m_sem_block_lock; - winapi_mutex_wrapper m_mtx_unblock_lock; - } m_condition_data; - - typedef condition_algorithm_8a algorithm_type; - - class named_cond_callbacks : public windows_named_sync_interface - { - typedef __int64 sem_count_t; - mutable sem_count_t sem_counts [2]; - - public: - named_cond_callbacks(condition_data &cond_data) - : m_condition_data(cond_data) - {} - - virtual std::size_t get_data_size() const - { return sizeof(sem_counts); } - - virtual const void *buffer_with_final_data_to_file() - { - sem_counts[0] = m_condition_data.m_sem_block_queue.value(); - sem_counts[1] = m_condition_data.m_sem_block_lock.value(); - return &sem_counts; - } - - virtual const void *buffer_with_init_data_to_file() - { - sem_counts[0] = 0; - sem_counts[1] = 1; - return &sem_counts; - } - - virtual void *buffer_to_store_init_data_from_file() - { return &sem_counts; } - - virtual bool open(create_enum_t, const char *id_name) - { - m_condition_data.m_nwaiters_blocked = 0; - m_condition_data.m_nwaiters_gone = 0; - m_condition_data.m_nwaiters_to_unblock = 0; - - //Now open semaphores and mutex. - //Use local variables + swap to guarantee consistent - //initialization and cleanup in case any opening fails - permissions perm; - perm.set_unrestricted(); - std::string aux_str = "Global\\bipc.cond."; - aux_str += id_name; - std::size_t pos = aux_str.size(); - - //sem_block_queue - aux_str += "_bq"; - winapi_semaphore_wrapper sem_block_queue; - bool created; - if(!sem_block_queue.open_or_create - (aux_str.c_str(), sem_counts[0], winapi_semaphore_wrapper::MaxCount, perm, created)) - return false; - aux_str.erase(pos); - - //sem_block_lock - aux_str += "_bl"; - winapi_semaphore_wrapper sem_block_lock; - if(!sem_block_lock.open_or_create - (aux_str.c_str(), sem_counts[1], winapi_semaphore_wrapper::MaxCount, perm, created)) - return false; - aux_str.erase(pos); - - //mtx_unblock_lock - aux_str += "_ul"; - winapi_mutex_wrapper mtx_unblock_lock; - if(!mtx_unblock_lock.open_or_create(aux_str.c_str(), perm)) - return false; - - //All ok, commit data - m_condition_data.m_sem_block_queue.swap(sem_block_queue); - m_condition_data.m_sem_block_lock.swap(sem_block_lock); - m_condition_data.m_mtx_unblock_lock.swap(mtx_unblock_lock); - return true; - } - - virtual void close() - { - m_condition_data.m_sem_block_queue.close(); - m_condition_data.m_sem_block_lock.close(); - m_condition_data.m_mtx_unblock_lock.close(); - m_condition_data.m_nwaiters_blocked = 0; - m_condition_data.m_nwaiters_gone = 0; - m_condition_data.m_nwaiters_to_unblock = 0; - } - - virtual ~named_cond_callbacks() - {} - - private: - condition_data &m_condition_data; - }; - - windows_named_sync m_named_sync; - /// @endcond -}; - -inline windows_named_condition::~windows_named_condition() -{ - named_cond_callbacks callbacks(m_condition_data); - m_named_sync.close(callbacks); -} - -inline void windows_named_condition::dont_close_on_destruction() -{} - -inline windows_named_condition::windows_named_condition - (create_only_t, const char *name, const permissions &perm) - : m_condition_data() -{ - named_cond_callbacks callbacks(m_condition_data); - m_named_sync.open_or_create(DoCreate, name, perm, callbacks); -} - -inline windows_named_condition::windows_named_condition - (open_or_create_t, const char *name, const permissions &perm) - : m_condition_data() -{ - named_cond_callbacks callbacks(m_condition_data); - m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks); -} - -inline windows_named_condition::windows_named_condition(open_only_t, const char *name) - : m_condition_data() -{ - named_cond_callbacks callbacks(m_condition_data); - m_named_sync.open_or_create(DoOpen, name, permissions(), callbacks); -} - -inline void windows_named_condition::notify_one() -{ algorithm_type::signal(m_condition_data, false); } - -inline void windows_named_condition::notify_all() -{ algorithm_type::signal(m_condition_data, true); } - -template -inline void windows_named_condition::do_wait(InterprocessMutex &mut) -{ algorithm_type::wait(m_condition_data, false, boost::posix_time::ptime(), mut); } - -template -inline bool windows_named_condition::do_timed_wait - (const boost::posix_time::ptime &abs_time, InterprocessMutex &mut) -{ return algorithm_type::wait(m_condition_data, true, abs_time, mut); } - -template -inline void windows_named_condition::wait(L& lock) -{ - if (!lock) - throw lock_exception(); - this->do_wait(*lock.mutex()); -} - -template -inline void windows_named_condition::wait(L& lock, Pr pred) -{ - if (!lock) - throw lock_exception(); - while (!pred()) - this->do_wait(*lock.mutex()); -} - -template -inline bool windows_named_condition::timed_wait - (L& lock, const boost::posix_time::ptime &abs_time) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock); - return true; - } - if (!lock) - throw lock_exception(); - return this->do_timed_wait(abs_time, *lock.mutex()); -} - -template -inline bool windows_named_condition::timed_wait - (L& lock, const boost::posix_time::ptime &abs_time, Pr pred) -{ - if(abs_time == boost::posix_time::pos_infin){ - this->wait(lock, pred); - return true; - } - if (!lock) - throw lock_exception(); - - while (!pred()){ - if(!this->do_timed_wait(abs_time, *lock.mutex())){ - return pred(); - } - } - return true; -} - -inline bool windows_named_condition::remove(const char *name) -{ - return windows_named_sync::remove(name); -} +typedef windows_named_condition_any windows_named_condition; } //namespace ipcdetail { } //namespace interprocess { diff --git a/3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp b/3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp new file mode 100644 index 0000000000..0d3b915b38 --- /dev/null +++ b/3party/boost/boost/interprocess/sync/windows/named_condition_any.hpp @@ -0,0 +1,241 @@ + ////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 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) +// +// See http://www.boost.org/libs/interprocess for documentation. +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_ANY_HPP +#define BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_ANY_HPP + +#if (defined _MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost { +namespace interprocess { +namespace ipcdetail { + +class windows_named_condition_any +{ + /// @cond + + //Non-copyable + windows_named_condition_any(); + windows_named_condition_any(const windows_named_condition_any &); + windows_named_condition_any &operator=(const windows_named_condition_any &); + /// @endcond + + public: + windows_named_condition_any + (create_only_t, const char *name, const permissions &perm) + : m_condition_data() + { + named_cond_callbacks callbacks(m_condition_data.get_members()); + m_named_sync.open_or_create(DoCreate, name, perm, callbacks); + } + + windows_named_condition_any + (open_or_create_t, const char *name, const permissions &perm) + : m_condition_data() + { + named_cond_callbacks callbacks(m_condition_data.get_members()); + m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks); + } + + windows_named_condition_any(open_only_t, const char *name) + : m_condition_data() + { + named_cond_callbacks callbacks(m_condition_data.get_members()); + m_named_sync.open_or_create(DoOpen, name, permissions(), callbacks); + } + + ~windows_named_condition_any() + { + named_cond_callbacks callbacks(m_condition_data.get_members()); + m_named_sync.close(callbacks); + } + + void notify_one() + { m_condition_data.notify_one(); } + + void notify_all() + { m_condition_data.notify_all(); } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time) + { return m_condition_data.timed_wait(lock, abs_time); } + + template + bool timed_wait(L& lock, const boost::posix_time::ptime &abs_time, Pr pred) + { return m_condition_data.timed_wait(lock, abs_time, pred); } + + template + void wait(L& lock) + { m_condition_data.wait(lock); } + + template + void wait(L& lock, Pr pred) + { m_condition_data.wait(lock, pred); } + + static bool remove(const char *name) + { return windows_named_sync::remove(name); } + + /// @cond + private: + + void windows_named_condition_any::dont_close_on_destruction() + {} + + friend class interprocess_tester; + + struct condition_data + { + typedef boost::int32_t integer_type; + typedef winapi_semaphore_wrapper semaphore_type; + typedef winapi_mutex_wrapper mutex_type; + + integer_type &get_nwaiters_blocked() + { return m_nwaiters_blocked; } + + integer_type &get_nwaiters_gone() + { return m_nwaiters_gone; } + + integer_type &get_nwaiters_to_unblock() + { return m_nwaiters_to_unblock; } + + semaphore_type &get_sem_block_queue() + { return m_sem_block_queue; } + + semaphore_type &get_sem_block_lock() + { return m_sem_block_lock; } + + mutex_type &get_mtx_unblock_lock() + { return m_mtx_unblock_lock; } + + integer_type m_nwaiters_blocked; + integer_type m_nwaiters_gone; + integer_type m_nwaiters_to_unblock; + winapi_semaphore_wrapper m_sem_block_queue; + winapi_semaphore_wrapper m_sem_block_lock; + winapi_mutex_wrapper m_mtx_unblock_lock; + }; + + ipcdetail::condition_8a_wrapper m_condition_data; + + class named_cond_callbacks : public windows_named_sync_interface + { + typedef __int64 sem_count_t; + mutable sem_count_t sem_counts [2]; + + public: + named_cond_callbacks(condition_data &cond_data) + : m_condition_data(cond_data) + {} + + virtual std::size_t get_data_size() const + { return sizeof(sem_counts); } + + virtual const void *buffer_with_final_data_to_file() + { + sem_counts[0] = m_condition_data.m_sem_block_queue.value(); + sem_counts[1] = m_condition_data.m_sem_block_lock.value(); + return &sem_counts; + } + + virtual const void *buffer_with_init_data_to_file() + { + sem_counts[0] = 0; + sem_counts[1] = 1; + return &sem_counts; + } + + virtual void *buffer_to_store_init_data_from_file() + { return &sem_counts; } + + virtual bool open(create_enum_t, const char *id_name) + { + m_condition_data.m_nwaiters_blocked = 0; + m_condition_data.m_nwaiters_gone = 0; + m_condition_data.m_nwaiters_to_unblock = 0; + + //Now open semaphores and mutex. + //Use local variables + swap to guarantee consistent + //initialization and cleanup in case any opening fails + permissions perm; + perm.set_unrestricted(); + std::string aux_str = "Global\\bipc.cond."; + aux_str += id_name; + std::size_t pos = aux_str.size(); + + //sem_block_queue + aux_str += "_bq"; + winapi_semaphore_wrapper sem_block_queue; + bool created; + if(!sem_block_queue.open_or_create + (aux_str.c_str(), sem_counts[0], winapi_semaphore_wrapper::MaxCount, perm, created)) + return false; + aux_str.erase(pos); + + //sem_block_lock + aux_str += "_bl"; + winapi_semaphore_wrapper sem_block_lock; + if(!sem_block_lock.open_or_create + (aux_str.c_str(), sem_counts[1], winapi_semaphore_wrapper::MaxCount, perm, created)) + return false; + aux_str.erase(pos); + + //mtx_unblock_lock + aux_str += "_ul"; + winapi_mutex_wrapper mtx_unblock_lock; + if(!mtx_unblock_lock.open_or_create(aux_str.c_str(), perm)) + return false; + + //All ok, commit data + m_condition_data.m_sem_block_queue.swap(sem_block_queue); + m_condition_data.m_sem_block_lock.swap(sem_block_lock); + m_condition_data.m_mtx_unblock_lock.swap(mtx_unblock_lock); + return true; + } + + virtual void close() + { + m_condition_data.m_sem_block_queue.close(); + m_condition_data.m_sem_block_lock.close(); + m_condition_data.m_mtx_unblock_lock.close(); + m_condition_data.m_nwaiters_blocked = 0; + m_condition_data.m_nwaiters_gone = 0; + m_condition_data.m_nwaiters_to_unblock = 0; + } + + virtual ~named_cond_callbacks() + {} + + private: + condition_data &m_condition_data; + }; + + windows_named_sync m_named_sync; + /// @endcond +}; + +} //namespace ipcdetail { +} //namespace interprocess { +} //namespace boost { + +#include + +#endif //BOOST_INTERPROCESS_WINDOWS_NAMED_CONDITION_ANY_HPP diff --git a/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp b/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp index 9565cb6fb4..2b4797e175 100644 --- a/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/windows/recursive_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/windows/semaphore.hpp b/3party/boost/boost/interprocess/sync/windows/semaphore.hpp index af336df48a..a8625a6bf1 100644 --- a/3party/boost/boost/interprocess/sync/windows/semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/windows/semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp b/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp index 0281da1266..10d0a55c68 100644 --- a/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp +++ b/3party/boost/boost/interprocess/sync/windows/sync_utils.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // diff --git a/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp b/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp index 266e7c5dac..deb429a3c4 100644 --- a/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp +++ b/3party/boost/boost/interprocess/sync/xsi/simple_xsi_semaphore.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2011-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 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) // diff --git a/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp b/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp index 485b1ac101..f69f9cda8c 100644 --- a/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp +++ b/3party/boost/boost/interprocess/sync/xsi/xsi_named_mutex.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // @@ -72,10 +72,10 @@ class xsi_named_mutex //!After the call, "moved" does not represent any named mutex. //!Does not throw xsi_named_mutex &operator=(BOOST_RV_REF(xsi_named_mutex) moved) - { + { xsi_named_mutex tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_named_mutex. Does not throw @@ -142,7 +142,7 @@ inline void xsi_named_mutex::swap(xsi_named_mutex &other) std::swap(m_id, other.m_id); std::swap(m_semid, other.m_semid); std::swap(m_perm, other.m_perm); - m_path.swap(other.m_path); + m_path.swap(other.m_path); } inline mapping_handle_t xsi_named_mutex::get_mapping_handle() const diff --git a/3party/boost/boost/interprocess/windows_shared_memory.hpp b/3party/boost/boost/interprocess/windows_shared_memory.hpp index 76601bb363..f2195ac2f3 100644 --- a/3party/boost/boost/interprocess/windows_shared_memory.hpp +++ b/3party/boost/boost/interprocess/windows_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2005-2011. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2005-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) // @@ -88,10 +88,10 @@ class windows_shared_memory //!After the call, "moved" does not represent any shared memory. //!Does not throw windows_shared_memory &operator=(BOOST_RV_REF(windows_shared_memory) moved) - { + { windows_shared_memory tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps to shared_memory_objects. Does not throw @@ -140,10 +140,10 @@ inline const char *windows_shared_memory::get_name() const { return m_name.c_str(); } inline void windows_shared_memory::swap(windows_shared_memory &other) -{ +{ std::swap(m_handle, other.m_handle); std::swap(m_mode, other.m_mode); - m_name.swap(other.m_name); + m_name.swap(other.m_name); } inline mapping_handle_t windows_shared_memory::get_mapping_handle() const diff --git a/3party/boost/boost/interprocess/xsi_shared_memory.hpp b/3party/boost/boost/interprocess/xsi_shared_memory.hpp index e84d9b1c54..11cfe1d10f 100644 --- a/3party/boost/boost/interprocess/xsi_shared_memory.hpp +++ b/3party/boost/boost/interprocess/xsi_shared_memory.hpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////// // -// (C) Copyright Ion Gaztanaga 2009. Distributed under the Boost +// (C) Copyright Ion Gaztanaga 2009-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) // @@ -89,10 +89,10 @@ class xsi_shared_memory //!After the call, "moved" does not represent any shared memory. //!Does not throw xsi_shared_memory &operator=(BOOST_RV_REF(xsi_shared_memory) moved) - { + { xsi_shared_memory tmp(boost::move(moved)); this->swap(tmp); - return *this; + return *this; } //!Swaps two xsi_shared_memorys. Does not throw diff --git a/3party/boost/boost/intrusive/avltree.hpp b/3party/boost/boost/intrusive/avltree.hpp index 84376a87c7..71e79433b8 100644 --- a/3party/boost/boost/intrusive/avltree.hpp +++ b/3party/boost/boost/intrusive/avltree.hpp @@ -89,7 +89,7 @@ class avltree_impl typedef typename Config::value_traits value_traits; /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits @@ -542,9 +542,9 @@ class avltree_impl template void insert_equal(Iterator b, Iterator e) { - iterator end(this->end()); + iterator end_(this->end()); for (; b != e; ++b) - this->insert_equal(end, *b); + this->insert_equal(end_, *b); } //! Requires: value must be an lvalue @@ -608,9 +608,9 @@ class avltree_impl void insert_unique(Iterator b, Iterator e) { if(this->empty()){ - iterator end(this->end()); + iterator end_(this->end()); for (; b != e; ++b) - this->insert_unique(end, *b); + this->insert_unique(end_, *b); } else{ for (; b != e; ++b) @@ -1249,7 +1249,7 @@ class avltree_impl //! Requires: KeyValueCompare is a function object that induces a strict weak //! ordering compatible with the strict weak ordering used to create the - //! the tree. + //! the tree. //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. //! @@ -1298,7 +1298,7 @@ class avltree_impl //! Requires: KeyValueCompare is a function object that induces a strict weak //! ordering compatible with the strict weak ordering used to create the - //! the tree. + //! the tree. //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false. //! diff --git a/3party/boost/boost/intrusive/circular_slist_algorithms.hpp b/3party/boost/boost/intrusive/circular_slist_algorithms.hpp index c39b3d0c5a..fc3848e83f 100644 --- a/3party/boost/boost/intrusive/circular_slist_algorithms.hpp +++ b/3party/boost/boost/intrusive/circular_slist_algorithms.hpp @@ -172,18 +172,17 @@ class circular_slist_algorithms static node_ptr get_previous_previous_node(const node_ptr & this_node) { return get_previous_previous_node(this_node, this_node); } - //! Requires: this_node and prev_prev_init_node must be in the same circular list. + //! Requires: this_node and p must be in the same circular list. //! //! Effects: Returns the previous node of the previous node of this_node in the - //! circular list starting. the search from prev_init_node. The first node checked - //! for equality is NodeTraits::get_next((NodeTraits::get_next(prev_prev_init_node)). + //! circular list starting. the search from p. The first node checked + //! for equality is NodeTraits::get_next((NodeTraits::get_next(p)). //! //! Complexity: Linear to the number of elements in the circular list. //! //! Throws: Nothing. - static node_ptr get_previous_previous_node(const node_ptr & prev_prev_init_node, const node_ptr & this_node) + static node_ptr get_previous_previous_node(node_ptr p, const node_ptr & this_node) { - node_ptr p = prev_prev_init_node; node_ptr p_next = NodeTraits::get_next(p); node_ptr p_next_next = NodeTraits::get_next(p_next); while (this_node != p_next_next){ diff --git a/3party/boost/boost/intrusive/detail/avltree_node.hpp b/3party/boost/boost/intrusive/detail/avltree_node.hpp index aec0dabd4b..f6aefcba0d 100644 --- a/3party/boost/boost/intrusive/detail/avltree_node.hpp +++ b/3party/boost/boost/intrusive/detail/avltree_node.hpp @@ -68,19 +68,28 @@ struct default_avltree_node_traits_impl typedef typename node::balance balance; - static const node_ptr & get_parent(const const_node_ptr & n) + static node_ptr get_parent(const const_node_ptr & n) + { return n->parent_; } + + static node_ptr get_parent(const node_ptr & n) { return n->parent_; } static void set_parent(const node_ptr & n, const node_ptr & p) { n->parent_ = p; } - static const node_ptr & get_left(const const_node_ptr & n) + static node_ptr get_left(const const_node_ptr & n) + { return n->left_; } + + static node_ptr get_left(const node_ptr & n) { return n->left_; } static void set_left(const node_ptr & n, const node_ptr & l) { n->left_ = l; } - static const node_ptr & get_right(const const_node_ptr & n) + static node_ptr get_right(const const_node_ptr & n) + { return n->right_; } + + static node_ptr get_right(const node_ptr & n) { return n->right_; } static void set_right(const node_ptr & n, const node_ptr & r) @@ -89,6 +98,9 @@ struct default_avltree_node_traits_impl static balance get_balance(const const_node_ptr & n) { return n->balance_; } + static balance get_balance(const node_ptr & n) + { return n->balance_; } + static void set_balance(const node_ptr & n, balance b) { n->balance_ = b; } @@ -125,13 +137,13 @@ struct compact_avltree_node_traits_impl static void set_parent(const node_ptr & n, const node_ptr & p) { ptr_bit::set_pointer(n->parent_, p); } - static const node_ptr & get_left(const const_node_ptr & n) + static node_ptr get_left(const const_node_ptr & n) { return n->left_; } static void set_left(const node_ptr & n, const node_ptr & l) { n->left_ = l; } - static const node_ptr & get_right(const const_node_ptr & n) + static node_ptr get_right(const const_node_ptr & n) { return n->right_; } static void set_right(const node_ptr & n, const node_ptr & r) diff --git a/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp b/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp index 942b35a3f4..166f78d438 100644 --- a/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp +++ b/3party/boost/boost/intrusive/detail/common_slist_algorithms.hpp @@ -31,9 +31,8 @@ class common_slist_algorithms typedef typename NodeTraits::const_node_ptr const_node_ptr; typedef NodeTraits node_traits; - static node_ptr get_previous_node(const node_ptr & prev_init_node, const node_ptr & this_node) + static node_ptr get_previous_node(node_ptr p, const node_ptr & this_node) { - node_ptr p = prev_init_node; for( node_ptr p_next ; this_node != (p_next = NodeTraits::get_next(p)) ; p = p_next){ diff --git a/3party/boost/boost/intrusive/detail/list_node.hpp b/3party/boost/boost/intrusive/detail/list_node.hpp index d406af60e4..32274e65a2 100644 --- a/3party/boost/boost/intrusive/detail/list_node.hpp +++ b/3party/boost/boost/intrusive/detail/list_node.hpp @@ -44,13 +44,19 @@ struct list_node_traits typedef typename pointer_traits :: template rebind_pointer::type const_node_ptr; - static const node_ptr &get_previous(const const_node_ptr & n) + static node_ptr get_previous(const const_node_ptr & n) + { return n->prev_; } + + static node_ptr get_previous(const node_ptr & n) { return n->prev_; } static void set_previous(const node_ptr & n, const node_ptr & prev) { n->prev_ = prev; } - static const node_ptr &get_next(const const_node_ptr & n) + static node_ptr get_next(const const_node_ptr & n) + { return n->next_; } + + static node_ptr get_next(const node_ptr & n) { return n->next_; } static void set_next(const node_ptr & n, const node_ptr & next) diff --git a/3party/boost/boost/intrusive/detail/rbtree_node.hpp b/3party/boost/boost/intrusive/detail/rbtree_node.hpp index b76582bb61..92d9417c75 100644 --- a/3party/boost/boost/intrusive/detail/rbtree_node.hpp +++ b/3party/boost/boost/intrusive/detail/rbtree_node.hpp @@ -68,19 +68,28 @@ struct default_rbtree_node_traits_impl typedef typename node::color color; - static const node_ptr & get_parent(const const_node_ptr & n) + static node_ptr get_parent(const const_node_ptr & n) + { return n->parent_; } + + static node_ptr get_parent(const node_ptr & n) { return n->parent_; } static void set_parent(const node_ptr & n, const node_ptr & p) { n->parent_ = p; } - static const node_ptr & get_left(const const_node_ptr & n) + static node_ptr get_left(const const_node_ptr & n) + { return n->left_; } + + static node_ptr get_left(const node_ptr & n) { return n->left_; } static void set_left(const node_ptr & n, const node_ptr & l) { n->left_ = l; } - static const node_ptr & get_right(const const_node_ptr & n) + static node_ptr get_right(const const_node_ptr & n) + { return n->right_; } + + static node_ptr get_right(const node_ptr & n) { return n->right_; } static void set_right(const node_ptr & n, const node_ptr & r) @@ -89,6 +98,9 @@ struct default_rbtree_node_traits_impl static color get_color(const const_node_ptr & n) { return n->color_; } + static color get_color(const node_ptr & n) + { return n->color_; } + static void set_color(const node_ptr & n, color c) { n->color_ = c; } @@ -117,16 +129,25 @@ struct compact_rbtree_node_traits_impl static node_ptr get_parent(const const_node_ptr & n) { return ptr_bit::get_pointer(n->parent_); } + static node_ptr get_parent(const node_ptr & n) + { return ptr_bit::get_pointer(n->parent_); } + static void set_parent(const node_ptr & n, const node_ptr & p) { ptr_bit::set_pointer(n->parent_, p); } - static const node_ptr & get_left(const const_node_ptr & n) + static node_ptr get_left(const const_node_ptr & n) + { return n->left_; } + + static node_ptr get_left(const node_ptr & n) { return n->left_; } static void set_left(const node_ptr & n, const node_ptr & l) { n->left_ = l; } - static const node_ptr & get_right(const const_node_ptr & n) + static node_ptr get_right(const const_node_ptr & n) + { return n->right_; } + + static node_ptr get_right(const node_ptr & n) { return n->right_; } static void set_right(const node_ptr & n, const node_ptr & r) @@ -135,6 +156,9 @@ struct compact_rbtree_node_traits_impl static color get_color(const const_node_ptr & n) { return (color)ptr_bit::get_bits(n->parent_); } + static color get_color(const node_ptr & n) + { return (color)ptr_bit::get_bits(n->parent_); } + static void set_color(const node_ptr & n, color c) { ptr_bit::set_bits(n->parent_, c != 0); } diff --git a/3party/boost/boost/intrusive/detail/slist_node.hpp b/3party/boost/boost/intrusive/detail/slist_node.hpp index 0eddbcd69a..ee92919809 100644 --- a/3party/boost/boost/intrusive/detail/slist_node.hpp +++ b/3party/boost/boost/intrusive/detail/slist_node.hpp @@ -42,7 +42,10 @@ struct slist_node_traits typedef typename pointer_traits ::template rebind_pointer::type const_node_ptr; - static const node_ptr &get_next(const const_node_ptr & n) + static node_ptr get_next(const const_node_ptr & n) + { return n->next_; } + + static node_ptr get_next(const node_ptr & n) { return n->next_; } static void set_next(const node_ptr & n, const node_ptr & next) diff --git a/3party/boost/boost/intrusive/detail/tree_algorithms.hpp b/3party/boost/boost/intrusive/detail/tree_algorithms.hpp index c92d39b3b9..acdedd9696 100644 --- a/3party/boost/boost/intrusive/detail/tree_algorithms.hpp +++ b/3party/boost/boost/intrusive/detail/tree_algorithms.hpp @@ -485,15 +485,14 @@ class tree_algorithms //! Complexity: Logarithmic to the size of the subtree. //! //! Throws: Nothing. - static node_ptr minimum (const node_ptr & node) + static node_ptr minimum (node_ptr node) { - node_ptr p(node); - for(node_ptr p_left = NodeTraits::get_left(p) + for(node_ptr p_left = NodeTraits::get_left(node) ;p_left - ;p_left = NodeTraits::get_left(p)){ - p = p_left; + ;p_left = NodeTraits::get_left(node)){ + node = p_left; } - return p; + return node; } //! Requires: 'node' is a node of a tree but not the header. @@ -503,15 +502,14 @@ class tree_algorithms //! Complexity: Logarithmic to the size of the subtree. //! //! Throws: Nothing. - static node_ptr maximum(const node_ptr & node) + static node_ptr maximum(node_ptr node) { - node_ptr p(node); - for(node_ptr p_right = NodeTraits::get_right(p) + for(node_ptr p_right = NodeTraits::get_right(node) ;p_right - ;p_right = NodeTraits::get_right(p)){ - p = p_right; + ;p_right = NodeTraits::get_right(node)){ + node = p_right; } - return p; + return node; } //! Requires: 'node' must not be part of any tree. @@ -1171,14 +1169,13 @@ class tree_algorithms //! Complexity: Logarithmic to the number of nodes in the tree. //! //! Throws: Nothing. - static std::size_t depth(const const_node_ptr & node) + static std::size_t depth(const_node_ptr node) { - const_node_ptr p(node); std::size_t depth = 0; node_ptr p_parent; - while(p != NodeTraits::get_parent(p_parent = NodeTraits::get_parent(p))){ + while(node != NodeTraits::get_parent(p_parent = NodeTraits::get_parent(node))){ ++depth; - p = p_parent; + node = p_parent; } return depth; } @@ -1295,12 +1292,10 @@ class tree_algorithms } template - static void dispose_subtree(const node_ptr & node, Disposer disposer) + static void dispose_subtree(node_ptr x, Disposer disposer) { - node_ptr save; - node_ptr x(node); while (x){ - save = NodeTraits::get_left(x); + node_ptr save(NodeTraits::get_left(x)); if (save) { // Right rotation NodeTraits::set_left(x, NodeTraits::get_right(save)); diff --git a/3party/boost/boost/intrusive/detail/tree_node.hpp b/3party/boost/boost/intrusive/detail/tree_node.hpp index 09fa7a4562..aa3374e947 100644 --- a/3party/boost/boost/intrusive/detail/tree_node.hpp +++ b/3party/boost/boost/intrusive/detail/tree_node.hpp @@ -41,19 +41,28 @@ struct tree_node_traits typedef typename pointer_traits::template rebind_pointer::type const_node_ptr; - static const node_ptr & get_parent(const const_node_ptr & n) + static node_ptr get_parent(const const_node_ptr & n) + { return n->parent_; } + + static node_ptr get_parent(const node_ptr & n) { return n->parent_; } static void set_parent(const node_ptr & n, const node_ptr & p) { n->parent_ = p; } - static const node_ptr & get_left(const const_node_ptr & n) + static node_ptr get_left(const const_node_ptr & n) + { return n->left_; } + + static node_ptr get_left(const node_ptr & n) { return n->left_; } static void set_left(const node_ptr & n, const node_ptr & l) { n->left_ = l; } - static const node_ptr & get_right(const const_node_ptr & n) + static node_ptr get_right(const const_node_ptr & n) + { return n->right_; } + + static node_ptr get_right(const node_ptr & n) { return n->right_; } static void set_right(const node_ptr & n, const node_ptr & r) diff --git a/3party/boost/boost/intrusive/detail/utilities.hpp b/3party/boost/boost/intrusive/detail/utilities.hpp index c6bc798994..722a7a3e82 100644 --- a/3party/boost/boost/intrusive/detail/utilities.hpp +++ b/3party/boost/boost/intrusive/detail/utilities.hpp @@ -41,64 +41,29 @@ struct internal_member_value_traits static const bool value = sizeof(test(0)) == sizeof(detail::two); }; -template -struct internal_base_hook_bool -{ - template - struct two_or_three {one _[2 + Add];}; - template static one test(...); - template static two_or_three test (int); - static const std::size_t value = sizeof(test(0)); -}; +#define BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(TRAITS_PREFIX, TYPEDEF_TO_FIND) \ +template \ +struct TRAITS_PREFIX##_bool\ +{\ + template\ + struct two_or_three {one _[2 + Add];};\ + template static one test(...);\ + template static two_or_three test (int);\ + static const std::size_t value = sizeof(test(0));\ +};\ +\ +template \ +struct TRAITS_PREFIX##_bool_is_true\ +{\ + static const bool value = TRAITS_PREFIX##_bool::value > sizeof(one)*2;\ +};\ +// -template -struct internal_base_hook_bool_is_true -{ - static const bool value = internal_base_hook_bool::value > sizeof(one)*2; -}; - -template -struct internal_any_hook_bool -{ - template - struct two_or_three {one _[2 + Add];}; - template static one test(...); - template static two_or_three test (int); - static const std::size_t value = sizeof(test(0)); -}; - -template -struct internal_any_hook_bool_is_true -{ - static const bool value = internal_any_hook_bool::value > sizeof(one)*2; -}; - - -template -struct external_value_traits_bool -{ - template - struct two_or_three {one _[2 + Add];}; - template static one test(...); - template static two_or_three test (int); - static const std::size_t value = sizeof(test(0)); -}; - -template -struct external_bucket_traits_bool -{ - template - struct two_or_three {one _[2 + Add];}; - template static one test(...); - template static two_or_three test (int); - static const std::size_t value = sizeof(test(0)); -}; - -template -struct external_value_traits_is_true -{ - static const bool value = external_value_traits_bool::value > sizeof(one)*2; -}; +BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(internal_base_hook, boost_intrusive_tags::is_base_hook) +BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(internal_any_hook, is_any_hook) +BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(external_value_traits, external_value_traits) +BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(external_bucket_traits, external_bucket_traits) +BOOST_INTRUSIVE_INTERNAL_STATIC_BOOL_IS_TRUE(resizable, resizable) template struct node_holder @@ -644,7 +609,7 @@ struct store_cont_ptr_on_it { typedef typename Container::value_traits value_traits; static const bool value = store_cont_ptr_on_it_impl - ::value>::value; + ::value>::value; }; template diff --git a/3party/boost/boost/intrusive/hashtable.hpp b/3party/boost/boost/intrusive/hashtable.hpp index 2435a083c3..1ade4d31df 100644 --- a/3party/boost/boost/intrusive/hashtable.hpp +++ b/3party/boost/boost/intrusive/hashtable.hpp @@ -135,7 +135,7 @@ template struct real_from_supposed_value_traits { typedef typename detail::eval_if_c - < detail::external_value_traits_is_true + < detail::external_value_traits_bool_is_true ::value , detail::eval_value_traits @@ -384,7 +384,7 @@ struct group_functions slist_node_ptr possible_end = node_traits::get_next(last_node_group); while(!(bucket_beg <= possible_end && possible_end <= bucket_end)){ - first_node_of_group = dcast_bucket_ptr(possible_end); + first_node_of_group = group_functions::dcast_bucket_ptr(possible_end); last_node_group = group_traits::get_next(first_node_of_group); possible_end = node_traits::get_next(last_node_group); } @@ -395,7 +395,7 @@ struct group_functions { //Just iterate using group links and obtain the node //before "first_in_group)" - node_ptr prev_node = dcast_bucket_ptr(bucket_node); + node_ptr prev_node = group_functions::dcast_bucket_ptr(bucket_node); node_ptr nxt(node_traits::get_next(prev_node)); while(nxt != first_in_group){ prev_node = group_traits::get_next(nxt); @@ -424,20 +424,20 @@ struct group_functions { node_ptr nxt_ptr(node_traits::get_next(to_erase_ptr)); node_ptr prev_in_group_ptr(group_traits::get_next(to_erase_ptr)); - bool last_in_group = (end_ptr == nxt_ptr) || + bool last_in_group_bool = (end_ptr == nxt_ptr) || (group_traits::get_next(nxt_ptr) != to_erase_ptr); - bool first_in_group = node_traits::get_next(prev_in_group_ptr) != to_erase_ptr; + bool first_in_group_bool = node_traits::get_next(prev_in_group_ptr) != to_erase_ptr; - if(first_in_group && last_in_group){ + if(first_in_group_bool && last_in_group_bool){ group_algorithms::init(to_erase_ptr); } - else if(first_in_group){ + else if(first_in_group_bool){ group_algorithms::unlink_after(nxt_ptr); } - else if(last_in_group){ - node_ptr first_in_group = + else if(last_in_group_bool){ + node_ptr first_in_group_ptr = get_first_in_group_of_last_in_group(to_erase_ptr); - group_algorithms::unlink_after(first_in_group); + group_algorithms::unlink_after(first_in_group_ptr); } else{ group_algorithms::unlink_after(nxt_ptr); @@ -480,7 +480,7 @@ struct group_functions , const slist_node_ptr &first_end_ptr, const slist_node_ptr &last_end_ptr) { slist_node_ptr prev; - node_ptr elem(dcast_bucket_ptr(i)); + node_ptr elem(group_functions::dcast_bucket_ptr(i)); //It's the last in group if the next_node is a bucket slist_node_ptr nxt(node_traits::get_next(elem)); @@ -687,7 +687,7 @@ class hashtable_impl /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits @@ -695,7 +695,7 @@ class hashtable_impl >::type real_value_traits; typedef typename Config::bucket_traits bucket_traits; static const bool external_bucket_traits = - detail::external_bucket_traits_is_true::value; + detail::external_bucket_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_bucket_traits , detail::eval_bucket_traits @@ -894,14 +894,14 @@ class hashtable_impl , const value_traits &v_traits = value_traits()) : data_(b_traits, hash_func, equal_func, v_traits) { - priv_initialize_buckets(); + this->priv_initialize_buckets(); this->priv_size_traits().set_size(size_type(0)); - size_type bucket_size = this->priv_buckets_len(); - BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_size != 0); + size_type bucket_size_ = this->priv_bucket_count(); + BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_size_ != 0); //Check power of two bucket array if the option is activated BOOST_INTRUSIVE_INVARIANT_ASSERT - (!power_2_buckets || (0 == (bucket_size & (bucket_size-1)))); - priv_split_traits().set_size(bucket_size>>1); + (!power_2_buckets || (0 == (bucket_size_ & (bucket_size_-1)))); + this->priv_split_traits().set_size(bucket_size_>>1); } //! Effects: to-do @@ -913,7 +913,7 @@ class hashtable_impl , ::boost::move(x.priv_value_traits()) ) { - priv_swap_cache(cache_begin_t(), x); + this->priv_swap_cache(cache_begin_t(), x); x.priv_initialize_cache(); if(constant_time_size){ this->priv_size_traits().set_size(size_type(0)); @@ -976,7 +976,7 @@ class hashtable_impl //! //! Throws: Nothing. iterator end() - { return iterator(priv_invalid_local_it(), 0); } + { return iterator(this->priv_invalid_local_it(), 0); } //! Effects: Returns a const_iterator pointing to the end of the unordered_set. //! @@ -992,7 +992,7 @@ class hashtable_impl //! //! Throws: Nothing. const_iterator cend() const - { return const_iterator(priv_invalid_local_it(), 0); } + { return const_iterator(this->priv_invalid_local_it(), 0); } //! Effects: Returns the hasher object used by the unordered_set. //! @@ -1026,9 +1026,9 @@ class hashtable_impl return this->begin() == this->end(); } else{ - size_type buckets_len = this->priv_buckets_len(); - const bucket_type *b = boost::intrusive::detail::to_raw_pointer(this->priv_buckets()); - for (size_type n = 0; n < buckets_len; ++n, ++b){ + size_type bucket_count_ = this->priv_bucket_count(); + const bucket_type *b = boost::intrusive::detail::to_raw_pointer(this->priv_bucket_pointer()); + for (size_type n = 0; n < bucket_count_; ++n, ++b){ if(!b->empty()){ return false; } @@ -1049,9 +1049,9 @@ class hashtable_impl return this->priv_size_traits().get_size(); else{ size_type len = 0; - size_type buckets_len = this->priv_buckets_len(); - const bucket_type *b = boost::intrusive::detail::to_raw_pointer(this->priv_buckets()); - for (size_type n = 0; n < buckets_len; ++n, ++b){ + size_type bucket_count_ = this->priv_bucket_count(); + const bucket_type *b = boost::intrusive::detail::to_raw_pointer(this->priv_bucket_pointer()); + for (size_type n = 0; n < bucket_count_; ++n, ++b){ len += b->size(); } return len; @@ -1077,7 +1077,7 @@ class hashtable_impl //These can't throw swap(this->priv_bucket_traits(), other.priv_bucket_traits()); swap(this->priv_value_traits(), other.priv_value_traits()); - priv_swap_cache(cache_begin_t(), other); + this->priv_swap_cache(cache_begin_t(), other); if(constant_time_size){ size_type backup = this->priv_size_traits().get_size(); this->priv_size_traits().set_size(other.priv_size_traits().get_size()); @@ -1125,8 +1125,8 @@ class hashtable_impl //If src bucket count is bigger or equal, structural copy is possible if(!incremental && (src_bucket_count >= dst_bucket_count)){ //First clone the first ones - const bucket_ptr src_buckets = src.priv_buckets(); - const bucket_ptr dst_buckets = this->priv_buckets(); + const bucket_ptr src_buckets = src.priv_bucket_pointer(); + const bucket_ptr dst_buckets = this->priv_bucket_pointer(); size_type constructed; typedef node_cast_adaptor > NodeDisposer; typedef node_cast_adaptor > NodeCloner; @@ -1147,7 +1147,7 @@ class hashtable_impl ; constructed < src_bucket_count ; ++constructed){ bucket_type &dst_b = - dst_buckets[priv_hash_to_bucket(constructed, dst_bucket_count, dst_bucket_count)]; + dst_buckets[this->priv_hash_to_bucket(constructed, dst_bucket_count, dst_bucket_count)]; bucket_type &src_b = src_buckets[constructed]; for( siterator b(src_b.begin()), e(src_b.end()) ; b != e @@ -1161,8 +1161,8 @@ class hashtable_impl rollback.release(); this->priv_size_traits().set_size(src.priv_size_traits().get_size()); this->priv_split_traits().set_size(dst_bucket_count); - priv_insertion_update_cache(0u); - priv_erasure_update_cache(); + this->priv_insertion_update_cache(0u); + this->priv_erasure_update_cache(); } else if(store_hash){ //Unlike previous cloning algorithm, this can throw @@ -1209,7 +1209,7 @@ class hashtable_impl siterator prev; siterator it = this->priv_find (value, this->priv_hasher(), this->priv_equal(), bucket_num, hash_value, prev); - return priv_insert_equal_find(value, bucket_num, hash_value, it); + return this->priv_insert_equal_find(value, bucket_num, hash_value, it); } //! Requires: Dereferencing iterator must yield an lvalue @@ -1323,7 +1323,7 @@ class hashtable_impl siterator prev; siterator prev_pos = this->priv_find(key, hash_func, equal_func, bucket_num, commit_data.hash, prev); - bool success = prev_pos == priv_invalid_local_it(); + bool success = prev_pos == this->priv_invalid_local_it(); if(success){ prev_pos = prev; } @@ -1351,14 +1351,14 @@ class hashtable_impl //! After a successful rehashing insert_commit_data remains valid. iterator insert_unique_commit(reference value, const insert_commit_data &commit_data) { - size_type bucket_num = priv_hash_to_bucket(commit_data.hash); - bucket_type &b = this->priv_buckets()[bucket_num]; + size_type bucket_num = this->priv_hash_to_bucket(commit_data.hash); + bucket_type &b = this->priv_bucket_pointer()[bucket_num]; this->priv_size_traits().increment(); - node_ptr n = pointer_traits::pointer_to(priv_value_to_node(value)); + node_ptr n = pointer_traits::pointer_to(this->priv_value_to_node(value)); node_functions_t::store_hash(n, commit_data.hash, store_hash_t()); if(safemode_or_autounlink) BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n)); - priv_insertion_update_cache(bucket_num); + this->priv_insertion_update_cache(bucket_num); group_functions_t::insert_in_group(node_ptr(), n, optimize_multikey_t()); return iterator(b.insert_after(b.before_begin(), *n), this); } @@ -1443,9 +1443,9 @@ class hashtable_impl /// @endcond ) { - priv_erase(i, disposer, optimize_multikey_t()); + this->priv_erase(i, disposer, optimize_multikey_t()); this->priv_size_traits().decrement(); - priv_erasure_update_cache(); + this->priv_erasure_update_cache(); } //! Requires: Disposer::operator()(pointer) shouldn't throw. @@ -1468,8 +1468,9 @@ class hashtable_impl siterator first_local_it(b.slist_it()); size_type first_bucket_num = this->priv_get_bucket_num(first_local_it); + const bucket_ptr bucket_pointer_ = this->priv_bucket_pointer(); siterator before_first_local_it - = priv_get_previous(priv_buckets()[first_bucket_num], first_local_it); + = this->priv_get_previous(bucket_pointer_[first_bucket_num], first_local_it); size_type last_bucket_num; siterator last_local_it; @@ -1477,14 +1478,14 @@ class hashtable_impl //of the last bucket if(e == this->end()){ last_bucket_num = this->bucket_count() - 1; - last_local_it = priv_buckets()[last_bucket_num].end(); + last_local_it = bucket_pointer_[last_bucket_num].end(); } else{ last_local_it = e.slist_it(); last_bucket_num = this->priv_get_bucket_num(last_local_it); } - priv_erase_range(before_first_local_it, first_bucket_num, last_local_it, last_bucket_num, disposer); - priv_erasure_update_cache(first_bucket_num, last_bucket_num); + this->priv_erase_range(before_first_local_it, first_bucket_num, last_local_it, last_bucket_num, disposer); + this->priv_erasure_update_cache(first_bucket_num, last_bucket_num); } } @@ -1505,7 +1506,7 @@ class hashtable_impl //! to the erased elements. No destructors are called. template size_type erase_and_dispose(const_reference value, Disposer disposer) - { return this->erase_and_dispose(value, priv_hasher(), priv_equal(), disposer); } + { return this->erase_and_dispose(value, this->priv_hasher(), this->priv_equal(), disposer); } //! Requires: Disposer::operator()(pointer) shouldn't throw. //! @@ -1531,23 +1532,23 @@ class hashtable_impl siterator prev; siterator it = this->priv_find(key, hash_func, equal_func, bucket_num, h, prev); - bool success = it != priv_invalid_local_it(); - size_type count(0); + bool success = it != this->priv_invalid_local_it(); + size_type count_(0); if(!success){ return 0; } else if(optimize_multikey){ siterator last = bucket_type::s_iterator_to (*node_traits::get_next(group_functions_t::get_last_in_group - (dcast_bucket_ptr(it.pointed_node()), optimize_multikey_t()))); - this->priv_erase_range_impl(bucket_num, prev, last, disposer, count); + (hashtable_impl::dcast_bucket_ptr(it.pointed_node()), optimize_multikey_t()))); + this->priv_erase_range_impl(bucket_num, prev, last, disposer, count_); } else{ //If found erase all equal values - bucket_type &b = this->priv_buckets()[bucket_num]; - for(siterator end = b.end(); it != end; ++count, ++it){ + bucket_type &b = this->priv_bucket_pointer()[bucket_num]; + for(siterator end_ = b.end(); it != end_; ++count_, ++it){ slist_node_ptr n(it.pointed_node()); - const value_type &v = priv_value_from_slist_node(n); + const value_type &v = this->priv_value_from_slist_node(n); if(compare_hash){ std::size_t vh = this->priv_stored_or_compute_hash(v, store_hash_t()); if(h != vh || !equal_func(key, v)){ @@ -1561,8 +1562,8 @@ class hashtable_impl } b.erase_after_and_dispose(prev, it, make_node_disposer(disposer)); } - priv_erasure_update_cache(); - return count; + this->priv_erasure_update_cache(); + return count_; } //! Effects: Erases all of the elements. @@ -1576,7 +1577,7 @@ class hashtable_impl //! to the erased elements. No destructors are called. void clear() { - priv_clear_buckets(); + this->priv_clear_buckets(); this->priv_size_traits().set_size(size_type(0)); } @@ -1596,13 +1597,13 @@ class hashtable_impl { if(!constant_time_size || !this->empty()){ size_type num_buckets = this->bucket_count(); - bucket_ptr b = this->priv_buckets(); + bucket_ptr b = this->priv_bucket_pointer(); for(; num_buckets--; ++b){ b->clear_and_dispose(make_node_disposer(disposer)); } this->priv_size_traits().set_size(size_type(0)); } - priv_initialize_cache(); + this->priv_initialize_cache(); } //! Effects: Returns the number of contained elements with the given value @@ -1629,9 +1630,9 @@ class hashtable_impl template size_type count(const KeyType &key, const KeyHasher &hash_func, const KeyValueEqual &equal_func) const { - size_type bucket_n1, bucket_n2, count; - this->priv_equal_range(key, hash_func, equal_func, bucket_n1, bucket_n2, count); - return count; + size_type bucket_n1, bucket_n2, count_; + this->priv_equal_range(key, hash_func, equal_func, bucket_n1, bucket_n2, count_); + return count_; } //! Effects: Finds an iterator to the first element is equal to @@ -1745,9 +1746,9 @@ class hashtable_impl std::pair equal_range (const KeyType &key, KeyHasher hash_func, KeyValueEqual equal_func) { - size_type bucket_n1, bucket_n2, count; + size_type bucket_n1, bucket_n2, count_; std::pair ret = this->priv_equal_range - (key, hash_func, equal_func, bucket_n1, bucket_n2, count); + (key, hash_func, equal_func, bucket_n1, bucket_n2, count_); return std::pair (iterator(ret.first, this), iterator(ret.second, this)); } @@ -1787,9 +1788,9 @@ class hashtable_impl std::pair equal_range (const KeyType &key, KeyHasher hash_func, KeyValueEqual equal_func) const { - size_type bucket_n1, bucket_n2, count; + size_type bucket_n1, bucket_n2, count_; std::pair ret = - this->priv_equal_range(key, hash_func, equal_func, bucket_n1, bucket_n2, count); + this->priv_equal_range(key, hash_func, equal_func, bucket_n1, bucket_n2, count_); return std::pair (const_iterator(ret.first, this), const_iterator(ret.second, this)); } @@ -1805,7 +1806,7 @@ class hashtable_impl //! Throws: If the internal hash function throws. iterator iterator_to(reference value) { - return iterator(bucket_type::s_iterator_to(priv_value_to_node(value)), this); + return iterator(bucket_type::s_iterator_to(this->priv_value_to_node(value)), this); } //! Requires: value must be an lvalue and shall be in a unordered_set of @@ -1899,7 +1900,7 @@ class hashtable_impl //! //! Throws: Nothing. size_type bucket_count() const - { return this->priv_buckets_len(); } + { return this->priv_bucket_count(); } //! Requires: n is in the range [0, this->bucket_count()). //! @@ -1909,7 +1910,7 @@ class hashtable_impl //! //! Throws: Nothing. size_type bucket_size(size_type n) const - { return this->priv_buckets()[n].size(); } + { return this->priv_bucket_pointer()[n].size(); } //! Effects: Returns the index of the bucket in which elements //! with keys equivalent to k would be found, if any such element existed. @@ -1936,7 +1937,7 @@ class hashtable_impl //! Note: the return value is in the range [0, this->bucket_count()). template size_type bucket(const KeyType& k, const KeyHasher &hash_func) const - { return priv_hash_to_bucket(hash_func(k)); } + { return this->priv_hash_to_bucket(hash_func(k)); } //! Effects: Returns the bucket array pointer passed in the constructor //! or the last rehash function. @@ -1945,7 +1946,7 @@ class hashtable_impl //! //! Throws: Nothing. bucket_ptr bucket_pointer() const - { return this->priv_buckets(); } + { return this->priv_bucket_pointer(); } //! Requires: n is in the range [0, this->bucket_count()). //! @@ -1959,7 +1960,7 @@ class hashtable_impl //! Note: [this->begin(n), this->end(n)) is a valid range //! containing all of the elements in the nth bucket. local_iterator begin(size_type n) - { return local_iterator(this->priv_buckets()[n].begin(), this); } + { return local_iterator(this->priv_bucket_pointer()[n].begin(), this); } //! Requires: n is in the range [0, this->bucket_count()). //! @@ -1988,7 +1989,7 @@ class hashtable_impl //! containing all of the elements in the nth bucket. const_local_iterator cbegin(size_type n) const { - siterator sit = const_cast(this->priv_buckets()[n]).begin(); + siterator sit = const_cast(this->priv_bucket_pointer()[n]).begin(); return const_local_iterator(sit, this); } @@ -2004,7 +2005,7 @@ class hashtable_impl //! Note: [this->begin(n), this->end(n)) is a valid range //! containing all of the elements in the nth bucket. local_iterator end(size_type n) - { return local_iterator(this->priv_buckets()[n].end(), this); } + { return local_iterator(this->priv_bucket_pointer()[n].end(), this); } //! Requires: n is in the range [0, this->bucket_count()). //! @@ -2032,19 +2033,19 @@ class hashtable_impl //! Note: [this->begin(n), this->end(n)) is a valid range //! containing all of the elements in the nth bucket. const_local_iterator cend(size_type n) const - { return const_local_iterator(const_cast(this->priv_buckets()[n]).end(), this); } + { return const_local_iterator(const_cast(this->priv_bucket_pointer()[n]).end(), this); } - //! Requires: new_buckets must be a pointer to a new bucket array - //! or the same as the old bucket array. new_size is the length of the - //! the array pointed by new_buckets. If new_buckets == this->bucket_pointer() - //! n can be bigger or smaller than this->bucket_count(). + //! Requires: new_bucket_traits can hold a pointer to a new bucket array + //! or the same as the old bucket array with a different length. new_size is the length of the + //! the array pointed by new_buckets. If new_bucket_traits.bucket_begin() == this->bucket_pointer() + //! new_bucket_traits.bucket_count() can be bigger or smaller than this->bucket_count(). //! 'new_bucket_traits' copy constructor should not throw. //! - //! Effects: Updates the internal reference with the new bucket erases + //! Effects: Updates the internal reference with the new bucket, erases //! the values from the old bucket and inserts then in the new one. //! Bucket traits hold by *this is assigned from new_bucket_traits. //! If the container is configured as incremental<>, the split bucket is set - //! to the new bucket_len(). + //! to the new bucket_count(). //! //! If store_hash option is true, this method does not use the hash function. //! @@ -2053,27 +2054,27 @@ class hashtable_impl //! Throws: If the hasher functor throws. Basic guarantee. void rehash(const bucket_traits &new_bucket_traits) { - bucket_ptr new_buckets = new_bucket_traits.bucket_begin(); - size_type new_buckets_len = new_bucket_traits.bucket_count(); - bucket_ptr old_buckets = this->priv_buckets(); - size_type old_buckets_len = this->priv_buckets_len(); + const bucket_ptr new_buckets = new_bucket_traits.bucket_begin(); + size_type new_bucket_count = new_bucket_traits.bucket_count(); + const bucket_ptr old_buckets = this->priv_bucket_pointer(); + size_type old_bucket_count = this->priv_bucket_count(); //Check power of two bucket array if the option is activated BOOST_INTRUSIVE_INVARIANT_ASSERT - (!power_2_buckets || (0 == (new_buckets_len & (new_buckets_len-1u)))); + (!power_2_buckets || (0 == (new_bucket_count & (new_bucket_count-1u)))); - size_type n = priv_get_cache_bucket_num(); + size_type n = this->priv_get_cache_bucket_num(); const bool same_buffer = old_buckets == new_buckets; //If the new bucket length is a common factor //of the old one we can avoid hash calculations. - const bool fast_shrink = (!incremental) && (old_buckets_len > new_buckets_len) && - (power_2_buckets ||(old_buckets_len % new_buckets_len) == 0); + const bool fast_shrink = (!incremental) && (old_bucket_count > new_bucket_count) && + (power_2_buckets ||(old_bucket_count % new_bucket_count) == 0); //If we are shrinking the same bucket array and it's //is a fast shrink, just rehash the last nodes - size_type new_first_bucket_num = new_buckets_len; - if(same_buffer && fast_shrink && (n < new_buckets_len)){ - n = new_buckets_len; - new_first_bucket_num = priv_get_cache_bucket_num(); + size_type new_first_bucket_num = new_bucket_count; + if(same_buffer && fast_shrink && (n < new_bucket_count)){ + n = new_bucket_count; + new_first_bucket_num = this->priv_get_cache_bucket_num(); } //Anti-exception stuff: they destroy the elements if something goes wrong. @@ -2084,34 +2085,34 @@ class hashtable_impl bucket_type & newbuck = new_buckets[0]; bucket_type & oldbuck = old_buckets[0]; detail::exception_array_disposer - rollback1(newbuck, node_disp, new_buckets_len); + rollback1(newbuck, node_disp, new_bucket_count); detail::exception_array_disposer - rollback2(oldbuck, node_disp, old_buckets_len); + rollback2(oldbuck, node_disp, old_bucket_count); //Put size in a safe value for rollback exception size_type size_backup = this->priv_size_traits().get_size(); this->priv_size_traits().set_size(0); //Put cache to safe position - priv_initialize_cache(); - priv_insertion_update_cache(size_type(0u)); + this->priv_initialize_cache(); + this->priv_insertion_update_cache(size_type(0u)); //Iterate through nodes - for(; n < old_buckets_len; ++n){ + for(; n < old_bucket_count; ++n){ bucket_type &old_bucket = old_buckets[n]; if(!fast_shrink){ siterator before_i(old_bucket.before_begin()); - siterator end(old_bucket.end()); + siterator end_(old_bucket.end()); siterator i(old_bucket.begin()); - for(;i != end; ++i){ - const value_type &v = priv_value_from_slist_node(i.pointed_node()); + for(;i != end_; ++i){ + const value_type &v = this->priv_value_from_slist_node(i.pointed_node()); const std::size_t hash_value = this->priv_stored_or_compute_hash(v, store_hash_t()); - const size_type new_n = priv_hash_to_bucket(hash_value, new_buckets_len, new_buckets_len); + const size_type new_n = this->priv_hash_to_bucket(hash_value, new_bucket_count, new_bucket_count); if(cache_begin && new_n < new_first_bucket_num) new_first_bucket_num = new_n; siterator last = bucket_type::s_iterator_to (*group_functions_t::get_last_in_group - (dcast_bucket_ptr(i.pointed_node()), optimize_multikey_t())); + (hashtable_impl::dcast_bucket_ptr(i.pointed_node()), optimize_multikey_t())); if(same_buffer && new_n == n){ before_i = last; } @@ -2123,7 +2124,7 @@ class hashtable_impl } } else{ - const size_type new_n = priv_hash_to_bucket(n, new_buckets_len, new_buckets_len); + const size_type new_n = this->priv_hash_to_bucket(n, new_bucket_count, new_bucket_count); if(cache_begin && new_n < new_first_bucket_num) new_first_bucket_num = new_n; bucket_type &new_b = new_buckets[new_n]; @@ -2131,16 +2132,16 @@ class hashtable_impl new_b.splice_after( new_b.before_begin() , old_bucket , old_bucket.before_begin() - , priv_get_last(old_bucket)); + , hashtable_impl::priv_get_last(old_bucket)); } } } this->priv_size_traits().set_size(size_backup); - this->priv_split_traits().set_size(new_buckets_len); + this->priv_split_traits().set_size(new_bucket_count); this->priv_real_bucket_traits() = new_bucket_traits; - priv_initialize_cache(); - priv_insertion_update_cache(new_first_bucket_num); + this->priv_initialize_cache(); + this->priv_insertion_update_cache(new_first_bucket_num); rollback1.release(); rollback2.release(); } @@ -2158,57 +2159,57 @@ class hashtable_impl { //This function is only available for containers with incremental hashing BOOST_STATIC_ASSERT(( incremental && power_2_buckets )); - size_type split_idx = priv_split_traits().get_size(); - size_type bucket_len = priv_buckets_len(); + const size_type split_idx = this->priv_split_traits().get_size(); + const size_type bucket_count_ = this->priv_bucket_count(); + const bucket_ptr bucket_pointer_ = this->priv_bucket_pointer(); if(grow){ //Test if the split variable can be changed - if(split_idx >= bucket_len) + if(split_idx >= bucket_count_) return false; - size_type bucket_len = priv_buckets_len(); - size_type bucket_to_rehash = split_idx - bucket_len/2; - bucket_type &old_bucket = this->priv_buckets()[bucket_to_rehash]; + const size_type bucket_to_rehash = split_idx - bucket_count_/2; + bucket_type &old_bucket = bucket_pointer_[bucket_to_rehash]; siterator before_i(old_bucket.before_begin()); - siterator end(old_bucket.end()); + const siterator end_(old_bucket.end()); siterator i(old_bucket.begin()); - priv_split_traits().increment(); + this->priv_split_traits().increment(); //Anti-exception stuff: if an exception is thrown while //moving elements from old_bucket to the target bucket, all moved //elements are moved back to the original one. detail::incremental_rehash_rollback rollback - ( this->priv_buckets()[split_idx], old_bucket, priv_split_traits()); - for(;i != end; ++i){ - const value_type &v = priv_value_from_slist_node(i.pointed_node()); + ( bucket_pointer_[split_idx], old_bucket, this->priv_split_traits()); + for(;i != end_; ++i){ + const value_type &v = this->priv_value_from_slist_node(i.pointed_node()); const std::size_t hash_value = this->priv_stored_or_compute_hash(v, store_hash_t()); - const size_type new_n = priv_hash_to_bucket(hash_value); + const size_type new_n = this->priv_hash_to_bucket(hash_value); siterator last = bucket_type::s_iterator_to (*group_functions_t::get_last_in_group - (dcast_bucket_ptr(i.pointed_node()), optimize_multikey_t())); + (hashtable_impl::dcast_bucket_ptr(i.pointed_node()), optimize_multikey_t())); if(new_n == bucket_to_rehash){ before_i = last; } else{ - bucket_type &new_b = this->priv_buckets()[new_n]; + bucket_type &new_b = bucket_pointer_[new_n]; new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last); } i = before_i; } rollback.release(); - priv_erasure_update_cache(); + this->priv_erasure_update_cache(); return true; } else{ //Test if the split variable can be changed - if(split_idx <= bucket_len/2) + if(split_idx <= bucket_count_/2) return false; - const size_type target_bucket_num = split_idx - 1 - bucket_len/2; - bucket_type &target_bucket = this->priv_buckets()[target_bucket_num]; - bucket_type &source_bucket = this->priv_buckets()[split_idx-1]; + const size_type target_bucket_num = split_idx - 1 - bucket_count_/2; + bucket_type &target_bucket = bucket_pointer_[target_bucket_num]; + bucket_type &source_bucket = bucket_pointer_[split_idx-1]; target_bucket.splice_after(target_bucket.cbefore_begin(), source_bucket); - priv_split_traits().decrement(); - priv_insertion_update_cache(target_bucket_num); + this->priv_split_traits().decrement(); + this->priv_insertion_update_cache(target_bucket_num); return true; } } @@ -2231,7 +2232,7 @@ class hashtable_impl //This function is only available for containers with incremental hashing BOOST_STATIC_ASSERT(( incremental && power_2_buckets )); size_type new_bucket_traits_size = new_bucket_traits.bucket_count(); - size_type cur_bucket_traits = this->priv_buckets_len(); + size_type cur_bucket_traits = this->priv_bucket_count(); if(new_bucket_traits_size/2 != cur_bucket_traits && new_bucket_traits_size != cur_bucket_traits/2){ return false; } @@ -2249,8 +2250,8 @@ class hashtable_impl return false; } - const size_type ini_n = priv_get_cache_bucket_num(); - const bucket_ptr old_buckets = this->priv_buckets(); + const size_type ini_n = this->priv_get_cache_bucket_num(); + const bucket_ptr old_buckets = this->priv_bucket_pointer(); this->priv_real_bucket_traits() = new_bucket_traits; if(new_bucket_traits.bucket_begin() != old_buckets){ for(size_type n = ini_n; n < split_idx; ++n){ @@ -2259,8 +2260,8 @@ class hashtable_impl new_bucket.splice_after(new_bucket.cbefore_begin(), old_bucket); } //Put cache to safe position - priv_initialize_cache(); - priv_insertion_update_cache(ini_n); + this->priv_initialize_cache(); + this->priv_insertion_update_cache(ini_n); } return true; } @@ -2321,22 +2322,22 @@ class hashtable_impl private: std::size_t priv_hash_to_bucket(std::size_t hash_value) const - { return priv_hash_to_bucket(hash_value, this->priv_real_bucket_traits().bucket_count(), priv_split_traits().get_size()); } + { return this->priv_hash_to_bucket(hash_value, this->priv_real_bucket_traits().bucket_count(), this->priv_split_traits().get_size()); } - std::size_t priv_hash_to_bucket(std::size_t hash_value, std::size_t bucket_len, std::size_t split) const + std::size_t priv_hash_to_bucket(std::size_t hash_value, std::size_t bucket_count_, std::size_t split) const { - std::size_t bucket_number = priv_hash_to_bucket_impl(hash_value, bucket_len, power_2_buckets_t()); + std::size_t bucket_number = hashtable_impl::priv_hash_to_bucket_impl(hash_value, bucket_count_, power_2_buckets_t()); if(incremental) if(bucket_number >= split) - bucket_number -= bucket_len/2; + bucket_number -= bucket_count_/2; return bucket_number; } - std::size_t priv_hash_to_bucket_impl(std::size_t hash_value, std::size_t bucket_len, detail::false_) const - { return hash_value % bucket_len; } + static std::size_t priv_hash_to_bucket_impl(std::size_t hash_value, std::size_t bucket_count, detail::false_) + { return hash_value % bucket_count; } - std::size_t priv_hash_to_bucket_impl(std::size_t hash_value, std::size_t bucket_len, detail::true_) const - { return hash_value & (bucket_len - 1); } + static std::size_t priv_hash_to_bucket_impl(std::size_t hash_value, std::size_t bucket_count, detail::true_) + { return hash_value & (bucket_count - 1); } const key_equal &priv_equal() const { return static_cast(this->data_.internal_.bucket_hash_equal_.get()); } @@ -2351,10 +2352,10 @@ class hashtable_impl { return data_; } value_type &priv_value_from_slist_node(slist_node_ptr n) - { return *this->get_real_value_traits().to_value_ptr(dcast_bucket_ptr(n)); } + { return *this->get_real_value_traits().to_value_ptr(hashtable_impl::dcast_bucket_ptr(n)); } const value_type &priv_value_from_slist_node(slist_node_ptr n) const - { return *this->get_real_value_traits().to_value_ptr(dcast_bucket_ptr(n)); } + { return *this->get_real_value_traits().to_value_ptr(hashtable_impl::dcast_bucket_ptr(n)); } const real_bucket_traits &priv_real_bucket_traits(detail::false_) const { return this->data_.internal_.bucket_hash_equal_.bucket_hash.bucket_plus_size_.bucket_traits_; } @@ -2386,15 +2387,12 @@ class hashtable_impl hasher &priv_hasher() { return static_cast(this->data_.internal_.bucket_hash_equal_.bucket_hash.get()); } - bucket_ptr priv_buckets() const + bucket_ptr priv_bucket_pointer() const { return this->priv_real_bucket_traits().bucket_begin(); } - size_type priv_buckets_len() const + size_type priv_bucket_count() const { return this->priv_real_bucket_traits().bucket_count(); } - static node_ptr uncast(const const_node_ptr & ptr) - { return node_ptr(const_cast(boost::intrusive::detail::to_raw_pointer(ptr))); } - node &priv_value_to_node(value_type &v) { return *this->get_real_value_traits().to_node_ptr(v); } @@ -2415,21 +2413,21 @@ class hashtable_impl template void priv_erase_range_impl - (size_type bucket_num, siterator before_first_it, siterator end, Disposer disposer, size_type &num_erased) + (size_type bucket_num, siterator before_first_it, siterator end_, Disposer disposer, size_type &num_erased) { - const bucket_ptr buckets = priv_buckets(); + const bucket_ptr buckets = this->priv_bucket_pointer(); bucket_type &b = buckets[bucket_num]; - if(before_first_it == b.before_begin() && end == b.end()){ - priv_erase_range_impl(bucket_num, 1, disposer, num_erased); + if(before_first_it == b.before_begin() && end_ == b.end()){ + this->priv_erase_range_impl(bucket_num, 1, disposer, num_erased); } else{ num_erased = 0; siterator to_erase(before_first_it); ++to_erase; - slist_node_ptr end_ptr = end.pointed_node(); - while(to_erase != end){ - group_functions_t::erase_from_group(end_ptr, dcast_bucket_ptr(to_erase.pointed_node()), optimize_multikey_t()); + slist_node_ptr end_ptr = end_.pointed_node(); + while(to_erase != end_){ + group_functions_t::erase_from_group(end_ptr, hashtable_impl::dcast_bucket_ptr(to_erase.pointed_node()), optimize_multikey_t()); to_erase = b.erase_after_and_dispose(before_first_it, make_node_disposer(disposer)); ++num_erased; } @@ -2442,16 +2440,16 @@ class hashtable_impl (size_type first_bucket_num, size_type num_buckets, Disposer disposer, size_type &num_erased) { //Now fully clear the intermediate buckets - const bucket_ptr buckets = priv_buckets(); + const bucket_ptr buckets = this->priv_bucket_pointer(); num_erased = 0; for(size_type i = first_bucket_num; i < (num_buckets + first_bucket_num); ++i){ bucket_type &b = buckets[i]; siterator b_begin(b.before_begin()); siterator nxt(b_begin); ++nxt; - siterator end(b.end()); - while(nxt != end){ - group_functions_t::init_group(dcast_bucket_ptr(nxt.pointed_node()), optimize_multikey_t()); + siterator end_(b.end()); + while(nxt != end_){ + group_functions_t::init_group(hashtable_impl::dcast_bucket_ptr(nxt.pointed_node()), optimize_multikey_t()); nxt = b.erase_after_and_dispose (b_begin, make_node_disposer(disposer)); this->priv_size_traits().decrement(); @@ -2467,14 +2465,14 @@ class hashtable_impl { size_type num_erased; if (first_bucket == last_bucket){ - priv_erase_range_impl(first_bucket, before_first_it, last_it, disposer, num_erased); + this->priv_erase_range_impl(first_bucket, before_first_it, last_it, disposer, num_erased); } else { - bucket_type *b = (&this->priv_buckets()[0]); - priv_erase_range_impl(first_bucket, before_first_it, b[first_bucket].end(), disposer, num_erased); + bucket_type *b = (&this->priv_bucket_pointer()[0]); + this->priv_erase_range_impl(first_bucket, before_first_it, b[first_bucket].end(), disposer, num_erased); if(size_type n = (last_bucket - first_bucket - 1)) - priv_erase_range_impl(first_bucket + 1, n, disposer, num_erased); - priv_erase_range_impl(last_bucket, b[last_bucket].before_begin(), last_it, disposer, num_erased); + this->priv_erase_range_impl(first_bucket + 1, n, disposer, num_erased); + this->priv_erase_range_impl(last_bucket, b[last_bucket].before_begin(), last_it, disposer, num_erased); } } @@ -2485,10 +2483,10 @@ class hashtable_impl { return node_traits::get_hash(this->get_real_value_traits().to_node_ptr(v)); } std::size_t priv_stored_or_compute_hash(const value_type &v, detail::false_) const - { return priv_hasher()(v); } + { return this->priv_hasher()(v); } std::size_t priv_stored_hash(slist_node_ptr n, detail::true_) const - { return node_traits::get_hash(dcast_bucket_ptr(n)); } + { return node_traits::get_hash(hashtable_impl::dcast_bucket_ptr(n)); } std::size_t priv_stored_hash(slist_node_ptr, detail::false_) const { @@ -2501,7 +2499,7 @@ class hashtable_impl { siterator it(b.begin()), itend(b.end()); while(it != itend){ - node_ptr to_erase(dcast_bucket_ptr(it.pointed_node())); + node_ptr to_erase(hashtable_impl::dcast_bucket_ptr(it.pointed_node())); ++it; group_algorithms::init(to_erase); } @@ -2511,7 +2509,7 @@ class hashtable_impl {} std::size_t priv_get_bucket_num(siterator it) - { return priv_get_bucket_num_hash_dispatch(it, store_hash_t()); } + { return this->priv_get_bucket_num_hash_dispatch(it, store_hash_t()); } std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::true_) { @@ -2520,15 +2518,15 @@ class hashtable_impl } std::size_t priv_get_bucket_num_hash_dispatch(siterator it, detail::false_) - { return priv_get_bucket_num_no_hash_store(it, optimize_multikey_t()); } + { return this->priv_get_bucket_num_no_hash_store(it, optimize_multikey_t()); } std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::true_) { - bucket_ptr f(priv_buckets()), l(f + priv_buckets_len() - 1); + const bucket_ptr f(this->priv_bucket_pointer()), l(f + this->priv_bucket_count() - 1); slist_node_ptr bb = group_functions_t::get_bucket_before_begin ( f->end().pointed_node() , l->end().pointed_node() - , dcast_bucket_ptr(it.pointed_node())); + , hashtable_impl::dcast_bucket_ptr(it.pointed_node())); //Now get the bucket_impl from the iterator const bucket_type &b = static_cast (bucket_type::slist_type::container_from_end_iterator(bucket_type::s_iterator_to(*bb))); @@ -2538,7 +2536,7 @@ class hashtable_impl std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::false_) { - bucket_ptr f(priv_buckets()), l(f + priv_buckets_len() - 1); + bucket_ptr f(this->priv_bucket_pointer()), l(f + this->priv_bucket_count() - 1); slist_node_ptr first_ptr(f->cend().pointed_node()) , last_ptr(l->cend().pointed_node()); @@ -2557,12 +2555,12 @@ class hashtable_impl siterator priv_get_previous (bucket_type &b, siterator i) - { return priv_get_previous(b, i, optimize_multikey_t()); } + { return this->priv_get_previous(b, i, optimize_multikey_t()); } siterator priv_get_previous (bucket_type &b, siterator i, detail::true_) { - node_ptr elem(dcast_bucket_ptr(i.pointed_node())); + node_ptr elem(hashtable_impl::dcast_bucket_ptr(i.pointed_node())); node_ptr prev_in_group(group_traits::get_next(elem)); bool first_in_group = node_traits::get_next(prev_in_group) != elem; typename bucket_type::node &n = first_in_group @@ -2577,7 +2575,7 @@ class hashtable_impl { return b.previous(i); } static siterator priv_get_last(bucket_type &b) - { return priv_get_last(b, optimize_multikey_t()); } + { return hashtable_impl::priv_get_last(b, optimize_multikey_t()); } static siterator priv_get_last(bucket_type &b, detail::true_) { @@ -2585,11 +2583,11 @@ class hashtable_impl //This requires checking the first node of the next group or //the bucket node. slist_node_ptr end_ptr(b.end().pointed_node()); - node_ptr possible_end(node_traits::get_next( dcast_bucket_ptr(end_ptr))); + node_ptr possible_end(node_traits::get_next( hashtable_impl::dcast_bucket_ptr(end_ptr))); node_ptr last_node_group(possible_end); while(end_ptr != possible_end){ - last_node_group = group_traits::get_next(dcast_bucket_ptr(possible_end)); + last_node_group = group_traits::get_next(hashtable_impl::dcast_bucket_ptr(possible_end)); possible_end = node_traits::get_next(last_node_group); } return bucket_type::s_iterator_to(*last_node_group); @@ -2597,87 +2595,7 @@ class hashtable_impl static siterator priv_get_last(bucket_type &b, detail::false_) { return b.previous(b.end()); } -/* - siterator priv_get_previous_and_next_in_group - (siterator i, node_ptr &nxt_in_group) - { - siterator prev; - node_ptr elem(dcast_bucket_ptr(i.pointed_node())); - bucket_ptr f(priv_buckets()), l(f + priv_buckets_len() - 1); - slist_node_ptr first_end_ptr(f->cend().pointed_node()); - slist_node_ptr last_end_ptr (l->cend().pointed_node()); - - node_ptr nxt(node_traits::get_next(elem)); - node_ptr prev_in_group(group_traits::get_next(elem)); - bool last_in_group = (first_end_ptr <= nxt && nxt <= last_end_ptr) || - (group_traits::get_next(nxt) != elem); - bool first_in_group = node_traits::get_next(prev_in_group) != elem; - - if(first_in_group){ - node_ptr start_pos; - if(last_in_group){ - start_pos = elem; - nxt_in_group = node_ptr(); - } - else{ - start_pos = prev_in_group; - nxt_in_group = node_traits::get_next(elem); - } - slist_node_ptr bucket_node; - if(store_hash){ - bucket_node = this->priv_buckets() - [this->priv_hash_to_bucket - (this->priv_stored_hash(elem, store_hash_t())) - ].before_begin().pointed_node(); - } - else{ - bucket_node = group_functions_t::get_bucket_before_begin - (first_end_ptr, last_end_ptr, start_pos); - } - prev = bucket_type::s_iterator_to - (*group_functions_t::get_prev_to_first_in_group(bucket_node, elem)); - } - else{ - if(last_in_group){ - nxt_in_group = group_functions_t::get_first_in_group_of_last_in_group(elem); - } - else{ - nxt_in_group = node_traits::get_next(elem); - } - prev = bucket_type::s_iterator_to(*group_traits::get_next(elem)); - } - return prev; - } -*/ - -/* - template - void priv_erase(const_iterator i, Disposer disposer, detail::true_) - { - siterator elem(i.slist_it()); - node_ptr nxt_in_group; - siterator prev = priv_get_previous_and_next_in_group(elem, nxt_in_group); - bucket_type::s_erase_after_and_dispose(prev, make_node_disposer(disposer)); - if(nxt_in_group) - group_algorithms::unlink_after(nxt_in_group); - if(safemode_or_autounlink) - group_algorithms::init(dcast_bucket_ptr(elem.pointed_node())); - } -*/ - -/* - if(store_hash){ - bucket_node = this->priv_buckets() - [this->priv_hash_to_bucket - (this->priv_stored_hash(elem, store_hash_t())) - ].before_begin().pointed_node(); - } - else{ - bucket_node = group_functions_t::get_bucket_before_begin - (first_end_ptr, last_end_ptr, start_pos); - } -*/ template void priv_erase(const_iterator i, Disposer disposer, detail::true_) { @@ -2685,14 +2603,14 @@ class hashtable_impl slist_node_ptr f_bucket_end, l_bucket_end; if(store_hash){ f_bucket_end = l_bucket_end = - (this->priv_buckets() + (this->priv_bucket_pointer() [this->priv_hash_to_bucket (this->priv_stored_hash(elem, store_hash_t())) ]).before_begin().pointed_node(); } else{ - f_bucket_end = this->priv_buckets()->cend().pointed_node(); - l_bucket_end = f_bucket_end + priv_buckets_len() - 1; + f_bucket_end = this->priv_bucket_pointer()->cend().pointed_node(); + l_bucket_end = f_bucket_end + this->priv_bucket_count() - 1; } node_ptr nxt_in_group; siterator prev = bucket_type::s_iterator_to @@ -2703,15 +2621,15 @@ class hashtable_impl if(nxt_in_group) group_algorithms::unlink_after(nxt_in_group); if(safemode_or_autounlink) - group_algorithms::init(dcast_bucket_ptr(elem)); + group_algorithms::init(hashtable_impl::dcast_bucket_ptr(elem)); } template void priv_erase(const_iterator i, Disposer disposer, detail::false_) { siterator to_erase(i.slist_it()); - bucket_type &b = this->priv_buckets()[this->priv_get_bucket_num(to_erase)]; - siterator prev(priv_get_previous(b, to_erase)); + bucket_type &b = this->priv_bucket_pointer()[this->priv_get_bucket_num(to_erase)]; + siterator prev(this->priv_get_previous(b, to_erase)); b.erase_after_and_dispose(prev, make_node_disposer(disposer)); } @@ -2722,28 +2640,28 @@ class hashtable_impl } siterator priv_invalid_local_it() const - { return priv_invalid_bucket()->end(); } + { return this->priv_invalid_bucket()->end(); } siterator priv_begin() const - { return priv_begin(cache_begin_t()); } + { return this->priv_begin(cache_begin_t()); } siterator priv_begin(detail::false_) const { size_type n = 0; - size_type buckets_len = this->priv_buckets_len(); - for (n = 0; n < buckets_len; ++n){ - bucket_type &b = this->priv_buckets()[n]; + size_type bucket_count_ = this->priv_bucket_count(); + for (n = 0; n < bucket_count_; ++n){ + bucket_type &b = this->priv_bucket_pointer()[n]; if(!b.empty()){ return b.begin(); } } - return priv_invalid_local_it(); + return this->priv_invalid_local_it(); } siterator priv_begin(detail::true_) const { - if(this->data_.internal_.bucket_hash_equal_.cached_begin_ == priv_invalid_bucket()){ - return priv_invalid_local_it(); + if(this->data_.internal_.bucket_hash_equal_.cached_begin_ == this->priv_invalid_bucket()){ + return this->priv_invalid_local_it(); } else{ return this->data_.internal_.bucket_hash_equal_.cached_begin_->begin(); @@ -2751,20 +2669,20 @@ class hashtable_impl } void priv_initialize_cache() - { priv_initialize_cache(cache_begin_t()); } + { this->priv_initialize_cache(cache_begin_t()); } void priv_initialize_cache(detail::true_) - { this->data_.internal_.bucket_hash_equal_.cached_begin_ = priv_invalid_bucket(); } + { this->data_.internal_.bucket_hash_equal_.cached_begin_ = this->priv_invalid_bucket(); } void priv_initialize_cache(detail::false_) {} void priv_insertion_update_cache(size_type insertion_bucket) - { priv_insertion_update_cache(insertion_bucket, cache_begin_t()); } + { this->priv_insertion_update_cache(insertion_bucket, cache_begin_t()); } void priv_insertion_update_cache(size_type insertion_bucket, detail::true_) { - bucket_ptr p = priv_buckets() + insertion_bucket; + bucket_ptr p = this->priv_bucket_pointer() + insertion_bucket; if(p < this->data_.internal_.bucket_hash_equal_.cached_begin_){ this->data_.internal_.bucket_hash_equal_.cached_begin_ = p; } @@ -2774,16 +2692,16 @@ class hashtable_impl {} void priv_erasure_update_cache(size_type first_bucket, size_type last_bucket) - { priv_erasure_update_cache(first_bucket, last_bucket, cache_begin_t()); } + { this->priv_erasure_update_cache(first_bucket, last_bucket, cache_begin_t()); } void priv_erasure_update_cache(size_type first_bucket_num, size_type last_bucket_num, detail::true_) { //If the last bucket is the end, the cache must be updated //to the last position if all - if(priv_get_cache_bucket_num() == first_bucket_num && - priv_buckets()[first_bucket_num].empty() ){ - priv_set_cache(priv_buckets() + last_bucket_num); - priv_erasure_update_cache(); + if(this->priv_get_cache_bucket_num() == first_bucket_num && + this->priv_bucket_pointer()[first_bucket_num].empty() ){ + this->priv_set_cache(this->priv_bucket_pointer() + last_bucket_num); + this->priv_erasure_update_cache(); } } @@ -2791,23 +2709,23 @@ class hashtable_impl {} void priv_erasure_update_cache() - { priv_erasure_update_cache(cache_begin_t()); } + { this->priv_erasure_update_cache(cache_begin_t()); } void priv_erasure_update_cache(detail::true_) { if(constant_time_size && !size()){ - priv_initialize_cache(); + this->priv_initialize_cache(); } else{ - size_type current_n = this->data_.internal_.bucket_hash_equal_.cached_begin_ - priv_buckets(); - for( const size_type num_buckets = this->priv_buckets_len() + size_type current_n = this->data_.internal_.bucket_hash_equal_.cached_begin_ - this->priv_bucket_pointer(); + for( const size_type num_buckets = this->priv_bucket_count() ; current_n < num_buckets ; ++current_n, ++this->data_.internal_.bucket_hash_equal_.cached_begin_){ if(!this->data_.internal_.bucket_hash_equal_.cached_begin_->empty()){ return; } } - priv_initialize_cache(); + this->priv_initialize_cache(); } } @@ -2824,22 +2742,22 @@ class hashtable_impl {} bucket_ptr priv_get_cache() - { return priv_get_cache(cache_begin_t()); } + { return this->priv_get_cache(cache_begin_t()); } bucket_ptr priv_get_cache(detail::true_) { return this->data_.internal_.bucket_hash_equal_.cached_begin_; } bucket_ptr priv_get_cache(detail::false_) - { return this->priv_buckets(); } + { return this->priv_bucket_pointer(); } void priv_set_cache(const bucket_ptr &p) { this->data_.internal_.bucket_hash_equal_.set_cache(p); } size_type priv_get_cache_bucket_num() - { return priv_get_cache_bucket_num(cache_begin_t()); } + { return this->priv_get_cache_bucket_num(cache_begin_t()); } size_type priv_get_cache_bucket_num(detail::true_) - { return this->data_.internal_.bucket_hash_equal_.cached_begin_ - this->priv_buckets(); } + { return this->data_.internal_.bucket_hash_equal_.cached_begin_ - this->priv_bucket_pointer(); } size_type priv_get_cache_bucket_num(detail::false_) { return 0u; } @@ -2847,25 +2765,25 @@ class hashtable_impl void priv_clear_buckets() { this->priv_clear_buckets - ( priv_get_cache() - , this->priv_buckets_len() - (priv_get_cache() - priv_buckets())); + ( this->priv_get_cache() + , this->priv_bucket_count() - (this->priv_get_cache() - this->priv_bucket_pointer())); } void priv_initialize_buckets() - { this->priv_clear_buckets(priv_buckets(), this->priv_buckets_len()); } + { this->priv_clear_buckets(this->priv_bucket_pointer(), this->priv_bucket_count()); } - void priv_clear_buckets(bucket_ptr buckets_ptr, size_type buckets_len) + void priv_clear_buckets(bucket_ptr buckets_ptr, size_type bucket_count_) { - for(; buckets_len--; ++buckets_ptr){ + for(; bucket_count_--; ++buckets_ptr){ if(safemode_or_autounlink){ - priv_clear_group_nodes(*buckets_ptr, optimize_multikey_t()); + hashtable_impl::priv_clear_group_nodes(*buckets_ptr, optimize_multikey_t()); buckets_ptr->clear_and_dispose(detail::init_disposer()); } else{ buckets_ptr->clear(); } } - priv_initialize_cache(); + this->priv_initialize_cache(); } template @@ -2874,25 +2792,25 @@ class hashtable_impl , KeyValueEqual equal_func, size_type &bucket_number, std::size_t &h, siterator &previt) const { h = hash_func(key); - return priv_find_with_hash(key, equal_func, bucket_number, h, previt); + return this->priv_find_with_hash(key, equal_func, bucket_number, h, previt); } template siterator priv_find_with_hash ( const KeyType &key, KeyValueEqual equal_func, size_type &bucket_number, const std::size_t h, siterator &previt) const { - bucket_number = priv_hash_to_bucket(h); - bucket_type &b = this->priv_buckets()[bucket_number]; + bucket_number = this->priv_hash_to_bucket(h); + bucket_type &b = this->priv_bucket_pointer()[bucket_number]; previt = b.before_begin(); if(constant_time_size && this->empty()){ - return priv_invalid_local_it(); + return this->priv_invalid_local_it(); } siterator it = previt; ++it; while(it != b.end()){ - const value_type &v = priv_value_from_slist_node(it.pointed_node()); + const value_type &v = this->priv_value_from_slist_node(it.pointed_node()); if(compare_hash){ std::size_t vh = this->priv_stored_or_compute_hash(v, store_hash_t()); if(h == vh && equal_func(key, v)){ @@ -2905,7 +2823,7 @@ class hashtable_impl if(optimize_multikey){ previt = bucket_type::s_iterator_to (*group_functions_t::get_last_in_group - (dcast_bucket_ptr(it.pointed_node()), optimize_multikey_t())); + (hashtable_impl::dcast_bucket_ptr(it.pointed_node()), optimize_multikey_t())); it = previt; } else{ @@ -2914,7 +2832,7 @@ class hashtable_impl ++it; } previt = b.before_begin(); - return priv_invalid_local_it(); + return this->priv_invalid_local_it(); } iterator priv_insert_equal_with_hash(reference value, std::size_t hash_value) @@ -2923,18 +2841,18 @@ class hashtable_impl siterator prev; siterator it = this->priv_find_with_hash (value, this->priv_equal(), bucket_num, hash_value, prev); - return priv_insert_equal_find(value, bucket_num, hash_value, it); + return this->priv_insert_equal_find(value, bucket_num, hash_value, it); } iterator priv_insert_equal_find(reference value, size_type bucket_num, std::size_t hash_value, siterator it) { - bucket_type &b = this->priv_buckets()[bucket_num]; - bool found_equal = it != priv_invalid_local_it(); + bucket_type &b = this->priv_bucket_pointer()[bucket_num]; + bool found_equal = it != this->priv_invalid_local_it(); if(!found_equal){ it = b.before_begin(); } //Now store hash if needed - node_ptr n = pointer_traits::pointer_to(priv_value_to_node(value)); + node_ptr n = pointer_traits::pointer_to(this->priv_value_to_node(value)); node_functions_t::store_hash(n, hash_value, store_hash_t()); //Checks for some modes if(safemode_or_autounlink) @@ -2942,11 +2860,11 @@ class hashtable_impl //Shorcut for optimize_multikey cases if(optimize_multikey){ node_ptr first_in_group = found_equal ? - dcast_bucket_ptr(it.pointed_node()) : node_ptr(); + hashtable_impl::dcast_bucket_ptr(it.pointed_node()) : node_ptr(); group_functions_t::insert_in_group(first_in_group, n, optimize_multikey_t()); } //Update cache and increment size if needed - priv_insertion_update_cache(bucket_num); + this->priv_insertion_update_cache(bucket_num); this->priv_size_traits().increment(); //Insert the element in the bucket after it return iterator(b.insert_after(it, *n), this); @@ -2959,61 +2877,63 @@ class hashtable_impl , KeyValueEqual equal_func , size_type &bucket_number_first , size_type &bucket_number_second - , size_type &count) const + , size_type &count_) const { std::size_t h; - count = 0; + count_ = 0; siterator prev; //Let's see if the element is present std::pair to_return - ( priv_find(key, hash_func, equal_func, bucket_number_first, h, prev) - , priv_invalid_local_it()); + ( this->priv_find(key, hash_func, equal_func, bucket_number_first, h, prev) + , this->priv_invalid_local_it()); if(to_return.first == to_return.second){ bucket_number_second = bucket_number_first; return to_return; } //If it's present, find the first that it's not equal in //the same bucket - bucket_type &b = this->priv_buckets()[bucket_number_first]; - siterator it = to_return.first; - if(optimize_multikey){ - to_return.second = bucket_type::s_iterator_to - (*node_traits::get_next(group_functions_t::get_last_in_group - (dcast_bucket_ptr(it.pointed_node()), optimize_multikey_t()))); - count = std::distance(it, to_return.second); - if(to_return.second != b.end()){ - bucket_number_second = bucket_number_first; - return to_return; - } - } - else{ - ++count; - ++it; - while(it != b.end()){ - const value_type &v = priv_value_from_slist_node(it.pointed_node()); - if(compare_hash){ - std::size_t hv = this->priv_stored_or_compute_hash(v, store_hash_t()); - if(hv != h || !equal_func(key, v)){ - to_return.second = it; - bucket_number_second = bucket_number_first; - return to_return; - } - } - else if(!equal_func(key, v)){ - to_return.second = it; - bucket_number_second = bucket_number_first; - return to_return; - } - ++it; - ++count; - } + { + bucket_type &b = this->priv_bucket_pointer()[bucket_number_first]; + siterator it = to_return.first; + if(optimize_multikey){ + to_return.second = bucket_type::s_iterator_to + (*node_traits::get_next(group_functions_t::get_last_in_group + (hashtable_impl::dcast_bucket_ptr(it.pointed_node()), optimize_multikey_t()))); + count_ = std::distance(it, to_return.second); + if(to_return.second != b.end()){ + bucket_number_second = bucket_number_first; + return to_return; + } + } + else{ + ++count_; + ++it; + while(it != b.end()){ + const value_type &v = this->priv_value_from_slist_node(it.pointed_node()); + if(compare_hash){ + std::size_t hv = this->priv_stored_or_compute_hash(v, store_hash_t()); + if(hv != h || !equal_func(key, v)){ + to_return.second = it; + bucket_number_second = bucket_number_first; + return to_return; + } + } + else if(!equal_func(key, v)){ + to_return.second = it; + bucket_number_second = bucket_number_first; + return to_return; + } + ++it; + ++count_; + } + } } //If we reached the end, find the first, non-empty bucket for(bucket_number_second = bucket_number_first+1 - ; bucket_number_second != this->priv_buckets_len() + ; bucket_number_second != this->priv_bucket_count() ; ++bucket_number_second){ - bucket_type &b = this->priv_buckets()[bucket_number_second]; + bucket_type &b = this->priv_bucket_pointer()[bucket_number_second]; if(!b.empty()){ to_return.second = b.begin(); return to_return; @@ -3021,7 +2941,7 @@ class hashtable_impl } //Otherwise, return the end node - to_return.second = priv_invalid_local_it(); + to_return.second = this->priv_invalid_local_it(); return to_return; } /// @endcond @@ -3055,7 +2975,9 @@ struct make_hashtable_opt typedef typename detail::get_value_traits ::type value_traits; static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value;/* + static const bool resizable_bucket_traits = + detail::resizable_bool_is_true::value;*/ typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits diff --git a/3party/boost/boost/intrusive/list.hpp b/3party/boost/boost/intrusive/list.hpp index 5450bc5d81..6024da6e89 100644 --- a/3party/boost/boost/intrusive/list.hpp +++ b/3party/boost/boost/intrusive/list.hpp @@ -83,7 +83,7 @@ class list_impl typedef typename Config::value_traits value_traits; /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits @@ -928,12 +928,12 @@ class list_impl //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, list_impl&x, const_iterator start, const_iterator end) + void splice(const_iterator p, list_impl&x, const_iterator start, const_iterator end_) { if(constant_time_size) - this->splice(p, x, start, end, std::distance(start, end)); + this->splice(p, x, start, end_, std::distance(start, end_)); else - this->splice(p, x, start, end, 1);//distance is a dummy value + this->splice(p, x, start, end_, 1);//distance is a dummy value } //! Requires: p must be a valid iterator of *this. @@ -949,19 +949,19 @@ class list_impl //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator p, list_impl&x, const_iterator start, const_iterator end, difference_type n) + void splice(const_iterator p, list_impl&x, const_iterator start, const_iterator end_, difference_type n) { if(n){ if(constant_time_size){ size_traits &thist = this->priv_size_traits(); size_traits &xt = x.priv_size_traits(); - BOOST_INTRUSIVE_INVARIANT_ASSERT(n == std::distance(start, end)); - node_algorithms::transfer(p.pointed_node(), start.pointed_node(), end.pointed_node()); + BOOST_INTRUSIVE_INVARIANT_ASSERT(n == std::distance(start, end_)); + node_algorithms::transfer(p.pointed_node(), start.pointed_node(), end_.pointed_node()); thist.set_size(thist.get_size() + n); xt.set_size(xt.get_size() - n); } else{ - node_algorithms::transfer(p.pointed_node(), start.pointed_node(), end.pointed_node()); + node_algorithms::transfer(p.pointed_node(), start.pointed_node(), end_.pointed_node()); } } } diff --git a/3party/boost/boost/intrusive/options.hpp b/3party/boost/boost/intrusive/options.hpp index e657438836..b1dd94419b 100644 --- a/3party/boost/boost/intrusive/options.hpp +++ b/3party/boost/boost/intrusive/options.hpp @@ -57,12 +57,6 @@ struct eval_value_traits typedef typename ValueTraits::value_traits type; }; -template -struct external_bucket_traits_is_true -{ - static const bool value = external_bucket_traits_bool::value == 3; -}; - template struct eval_bucket_traits { diff --git a/3party/boost/boost/intrusive/pointer_traits.hpp b/3party/boost/boost/intrusive/pointer_traits.hpp index 3ed1afb032..98ca6b9344 100644 --- a/3party/boost/boost/intrusive/pointer_traits.hpp +++ b/3party/boost/boost/intrusive/pointer_traits.hpp @@ -170,7 +170,7 @@ struct pointer_traits template static pointer priv_static_cast_from(boost::false_type, const UPtr &uptr) - { return pointer_to(static_cast(*uptr)); } + { return pointer_to(*static_cast(to_raw_pointer(uptr))); } //priv_const_cast_from template diff --git a/3party/boost/boost/intrusive/rbtree.hpp b/3party/boost/boost/intrusive/rbtree.hpp index 1c0c30edcb..2f3ee564e5 100644 --- a/3party/boost/boost/intrusive/rbtree.hpp +++ b/3party/boost/boost/intrusive/rbtree.hpp @@ -89,7 +89,7 @@ class rbtree_impl typedef typename Config::value_traits value_traits; /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits diff --git a/3party/boost/boost/intrusive/rbtree_algorithms.hpp b/3party/boost/boost/intrusive/rbtree_algorithms.hpp index 451a550a84..fc28630da3 100644 --- a/3party/boost/boost/intrusive/rbtree_algorithms.hpp +++ b/3party/boost/boost/intrusive/rbtree_algorithms.hpp @@ -805,26 +805,26 @@ class rbtree_algorithms // NodeTraits::get_parent(NodeTraits::get_parent(p)) == p; } - static void rebalance_after_erasure(const node_ptr & header, const node_ptr &xnode, const node_ptr &xnode_parent) + static void rebalance_after_erasure(const node_ptr & header, node_ptr x, node_ptr x_parent) { - node_ptr x(xnode), x_parent(xnode_parent); - while(x != NodeTraits::get_parent(header) && (x == node_ptr() || NodeTraits::get_color(x) == NodeTraits::black())){ + while(x != NodeTraits::get_parent(header) && (!x || NodeTraits::get_color(x) == NodeTraits::black())){ if(x == NodeTraits::get_left(x_parent)){ node_ptr w = NodeTraits::get_right(x_parent); + BOOST_ASSERT(w); if(NodeTraits::get_color(w) == NodeTraits::red()){ NodeTraits::set_color(w, NodeTraits::black()); NodeTraits::set_color(x_parent, NodeTraits::red()); tree_algorithms::rotate_left(x_parent, header); w = NodeTraits::get_right(x_parent); } - if((NodeTraits::get_left(w) == node_ptr() || NodeTraits::get_color(NodeTraits::get_left(w)) == NodeTraits::black()) && - (NodeTraits::get_right(w) == node_ptr() || NodeTraits::get_color(NodeTraits::get_right(w)) == NodeTraits::black())){ + if((!NodeTraits::get_left(w) || NodeTraits::get_color(NodeTraits::get_left(w)) == NodeTraits::black()) && + (!NodeTraits::get_right(w) || NodeTraits::get_color(NodeTraits::get_right(w)) == NodeTraits::black())){ NodeTraits::set_color(w, NodeTraits::red()); x = x_parent; x_parent = NodeTraits::get_parent(x_parent); } else { - if(NodeTraits::get_right(w) == node_ptr() || NodeTraits::get_color(NodeTraits::get_right(w)) == NodeTraits::black()){ + if(!NodeTraits::get_right(w) || NodeTraits::get_color(NodeTraits::get_right(w)) == NodeTraits::black()){ NodeTraits::set_color(NodeTraits::get_left(w), NodeTraits::black()); NodeTraits::set_color(w, NodeTraits::red()); tree_algorithms::rotate_right(w, header); @@ -847,14 +847,14 @@ class rbtree_algorithms tree_algorithms::rotate_right(x_parent, header); w = NodeTraits::get_left(x_parent); } - if((NodeTraits::get_right(w) == node_ptr() || NodeTraits::get_color(NodeTraits::get_right(w)) == NodeTraits::black()) && - (NodeTraits::get_left(w) == node_ptr() || NodeTraits::get_color(NodeTraits::get_left(w)) == NodeTraits::black())){ + if((!NodeTraits::get_right(w) || NodeTraits::get_color(NodeTraits::get_right(w)) == NodeTraits::black()) && + (!NodeTraits::get_left(w) || NodeTraits::get_color(NodeTraits::get_left(w)) == NodeTraits::black())){ NodeTraits::set_color(w, NodeTraits::red()); x = x_parent; x_parent = NodeTraits::get_parent(x_parent); } else { - if(NodeTraits::get_left(w) == node_ptr() || NodeTraits::get_color(NodeTraits::get_left(w)) == NodeTraits::black()){ + if(!NodeTraits::get_left(w) || NodeTraits::get_color(NodeTraits::get_left(w)) == NodeTraits::black()){ NodeTraits::set_color(NodeTraits::get_right(w), NodeTraits::black()); NodeTraits::set_color(w, NodeTraits::red()); tree_algorithms::rotate_left(w, header); @@ -874,9 +874,8 @@ class rbtree_algorithms } - static void rebalance_after_insertion(const node_ptr & header, const node_ptr &pnode) + static void rebalance_after_insertion(const node_ptr & header, node_ptr p) { - node_ptr p(pnode); NodeTraits::set_color(p, NodeTraits::red()); while(p != NodeTraits::get_parent(header) && NodeTraits::get_color(NodeTraits::get_parent(p)) == NodeTraits::red()){ node_ptr p_parent(NodeTraits::get_parent(p)); diff --git a/3party/boost/boost/intrusive/sgtree.hpp b/3party/boost/boost/intrusive/sgtree.hpp index f181f54005..cda9f7f531 100644 --- a/3party/boost/boost/intrusive/sgtree.hpp +++ b/3party/boost/boost/intrusive/sgtree.hpp @@ -215,7 +215,7 @@ class sgtree_impl typedef typename Config::value_traits value_traits; /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits @@ -701,9 +701,9 @@ class sgtree_impl template void insert_equal(Iterator b, Iterator e) { - iterator end(this->end()); + iterator end_(this->end()); for (; b != e; ++b) - this->insert_equal(end, *b); + this->insert_equal(end_, *b); } //! Requires: value must be an lvalue @@ -767,9 +767,9 @@ class sgtree_impl void insert_unique(Iterator b, Iterator e) { if(this->empty()){ - iterator end(this->end()); + iterator end_(this->end()); for (; b != e; ++b) - this->insert_unique(end, *b); + this->insert_unique(end_, *b); } else{ for (; b != e; ++b) diff --git a/3party/boost/boost/intrusive/slist.hpp b/3party/boost/boost/intrusive/slist.hpp index d7fc1316b1..5ab5bf61b7 100644 --- a/3party/boost/boost/intrusive/slist.hpp +++ b/3party/boost/boost/intrusive/slist.hpp @@ -112,7 +112,7 @@ class slist_impl typedef typename Config::value_traits value_traits; /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits @@ -758,9 +758,9 @@ class slist_impl //! //! Note: Does not affect the validity of iterators and references. template - void insert_after(const_iterator prev_p, Iterator first, Iterator last) + void insert_after(const_iterator prev_p, Iterator first, Iterator last_) { - for (; first != last; ++first) + for (; first != last_; ++first) prev_p = this->insert_after(prev_p, *first); } @@ -825,21 +825,21 @@ class slist_impl //! //! Note: Invalidates the iterators (but not the references) to the //! erased element. - iterator erase_after(const_iterator before_first, const_iterator last) + iterator erase_after(const_iterator before_first, const_iterator last_) { if(safemode_or_autounlink || constant_time_size){ - return this->erase_after_and_dispose(before_first, last, detail::null_disposer()); + return this->erase_after_and_dispose(before_first, last_, detail::null_disposer()); } else{ node_ptr bfp = before_first.pointed_node(); - node_ptr lp = last.pointed_node(); + node_ptr lp = last_.pointed_node(); if(cache_last){ if(lp == this->get_end_node()){ this->set_last_node(bfp); } } node_algorithms::unlink_after(bfp, lp); - return last.unconst(); + return last_.unconst(); } } @@ -857,15 +857,15 @@ class slist_impl //! //! Note: Invalidates the iterators (but not the references) to the //! erased element. - iterator erase_after(const_iterator before_first, const_iterator last, difference_type n) + iterator erase_after(const_iterator before_first, const_iterator last_, difference_type n) { - BOOST_INTRUSIVE_INVARIANT_ASSERT(std::distance(++const_iterator(before_first), last) == difference_type(n)); + BOOST_INTRUSIVE_INVARIANT_ASSERT(std::distance(++const_iterator(before_first), last_) == difference_type(n)); if(safemode_or_autounlink){ - return this->erase_after(before_first, last); + return this->erase_after(before_first, last_); } else{ node_ptr bfp = before_first.pointed_node(); - node_ptr lp = last.pointed_node(); + node_ptr lp = last_.pointed_node(); if(cache_last){ if((lp == this->get_end_node())){ this->set_last_node(bfp); @@ -875,7 +875,7 @@ class slist_impl if(constant_time_size){ this->priv_size_traits().set_size(this->priv_size_traits().get_size() - n); } - return last.unconst(); + return last_.unconst(); } } @@ -908,8 +908,8 @@ class slist_impl //! //! Note: Invalidates the iterators (but not the references) to the //! erased elements. - iterator erase(const_iterator first, const_iterator last) - { return this->erase_after(this->previous(first), last); } + iterator erase(const_iterator first, const_iterator last_) + { return this->erase_after(this->previous(first), last_); } //! Effects: Erases the range [first, last) from //! the list. n must be std::distance(first, last). @@ -925,8 +925,8 @@ class slist_impl //! //! Note: Invalidates the iterators (but not the references) to the //! erased element. - iterator erase(const_iterator first, const_iterator last, difference_type n) - { return this->erase_after(this->previous(first), last, n); } + iterator erase(const_iterator first, const_iterator last_, difference_type n) + { return this->erase_after(this->previous(first), last_, n); } //! Requires: Disposer::operator()(pointer) shouldn't throw. //! @@ -999,9 +999,9 @@ class slist_impl //! //! Note: Invalidates the iterators to the erased element. template - iterator erase_after_and_dispose(const_iterator before_first, const_iterator last, Disposer disposer) + iterator erase_after_and_dispose(const_iterator before_first, const_iterator last_, Disposer disposer) { - node_ptr bfp(before_first.pointed_node()), lp(last.pointed_node()); + node_ptr bfp(before_first.pointed_node()), lp(last_.pointed_node()); node_ptr fp(node_traits::get_next(bfp)); node_algorithms::unlink_after(bfp, lp); while(fp != lp){ @@ -1015,7 +1015,7 @@ class slist_impl if(cache_last && (node_traits::get_next(bfp) == this->get_end_node())){ this->set_last_node(bfp); } - return last.unconst(); + return last_.unconst(); } //! Requires: Disposer::operator()(pointer) shouldn't throw. @@ -1061,8 +1061,8 @@ class slist_impl //! Note: Invalidates the iterators (but not the references) to the //! erased elements. template - iterator erase_and_dispose(const_iterator first, const_iterator last, Disposer disposer) - { return this->erase_after_and_dispose(this->previous(first), last, disposer); } + iterator erase_and_dispose(const_iterator first, const_iterator last_, Disposer disposer) + { return this->erase_after_and_dispose(this->previous(first), last_, disposer); } //! Requires: Dereferencing iterator must yield //! an lvalue of type value_type. @@ -1130,14 +1130,14 @@ class slist_impl //! assigned to the last spliced element or prev if x is empty. //! This iterator can be used as new "prev" iterator for a new splice_after call. //! that will splice new values after the previously spliced values. - void splice_after(const_iterator prev, slist_impl &x, const_iterator *last = 0) + void splice_after(const_iterator prev, slist_impl &x, const_iterator *last_ = 0) { if(x.empty()){ - if(last) *last = prev; + if(last_) *last_ = prev; } else if(linear && this->empty()){ this->swap(x); - if(last) *last = this->previous(this->cend()); + if(last_) *last_ = this->previous(this->cend()); } else{ const_iterator last_x(x.previous(x.end())); //<- constant time if cache_last is active @@ -1152,7 +1152,7 @@ class slist_impl node_algorithms::transfer_after( prev_n, x.before_begin().pointed_node(), last_x_n); this->priv_size_traits().set_size(this->priv_size_traits().get_size() + x.priv_size_traits().get_size()); x.priv_size_traits().set_size(size_type(0)); - if(last) *last = last_x; + if(last_) *last_ = last_x; } } @@ -1247,8 +1247,8 @@ class slist_impl //! assigned to the last spliced element or prev if x is empty. //! This iterator can be used as new "prev" iterator for a new splice_after call. //! that will splice new values after the previously spliced values. - void splice(const_iterator it, slist_impl &x, const_iterator *last = 0) - { this->splice_after(this->previous(it), x, last); } + void splice(const_iterator it, slist_impl &x, const_iterator *last_ = 0) + { this->splice_after(this->previous(it), x, last_); } //! Requires: it p must be a valid iterator of *this. //! elem must point to an element contained in list @@ -1284,8 +1284,8 @@ class slist_impl //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator pos, slist_impl &x, const_iterator first, const_iterator last) - { return this->splice_after(this->previous(pos), x, x.previous(first), x.previous(last)); } + void splice(const_iterator pos, slist_impl &x, const_iterator first, const_iterator last_) + { return this->splice_after(this->previous(pos), x, x.previous(first), x.previous(last_)); } //! Requires: pos must be a dereferenceable iterator in *this //! and first and last belong to x and first and last a valid range on x. @@ -1303,8 +1303,8 @@ class slist_impl //! //! Note: Iterators of values obtained from list x now point to elements of this //! list. Iterators of this list and all the references are not invalidated. - void splice(const_iterator pos, slist_impl &x, const_iterator first, const_iterator last, difference_type n) - { return this->splice_after(this->previous(pos), x, x.previous(first), x.previous(last), n); } + void splice(const_iterator pos, slist_impl &x, const_iterator first, const_iterator last_, difference_type n) + { return this->splice_after(this->previous(pos), x, x.previous(first), x.previous(last_), n); } //! Effects: This function sorts the list *this according to std::less. //! The sort is stable, that is, the relative order of equivalent elements is preserved. @@ -1405,11 +1405,11 @@ class slist_impl //! Additional note: If optional "last" argument is passed, it is assigned //! to an iterator to the last transferred value or end() is x is empty. template - void merge(slist_impl& x, Predicate p, const_iterator *last = 0) + void merge(slist_impl& x, Predicate p, const_iterator *last_ = 0) { const_iterator e(this->cend()), ex(x.cend()), bb(this->cbefore_begin()), bb_next; - if(last) *last = e.unconst(); + if(last_) *last_ = e.unconst(); while(!x.empty()){ const_iterator ibx_next(x.cbefore_begin()), ibx(ibx_next++); while (++(bb_next = bb) != e && !p(*ibx_next, *bb_next)){ @@ -1417,7 +1417,7 @@ class slist_impl } if(bb_next == e){ //Now transfer the rest to the end of the container - this->splice_after(bb, x, last); + this->splice_after(bb, x, last_); break; } else{ @@ -1426,7 +1426,7 @@ class slist_impl ibx = ibx_next; ++n; } while(++(ibx_next = ibx) != ex && p(*ibx_next, *bb_next)); this->splice_after(bb, x, x.before_begin(), ibx, n); - if(last) *last = ibx; + if(last_) *last_ = ibx; } } } @@ -1816,9 +1816,9 @@ class slist_impl void priv_shift_backwards(size_type n, detail::bool_) { - node_ptr last = node_algorithms::move_forward(this->get_root_node(), (std::size_t)n); - if(cache_last && last){ - this->set_last_node(last); + node_ptr last_ = node_algorithms::move_forward(this->get_root_node(), (std::size_t)n); + if(cache_last && last_){ + this->set_last_node(last_); } } @@ -1837,9 +1837,9 @@ class slist_impl void priv_shift_forward(size_type n, detail::bool_) { - node_ptr last = node_algorithms::move_backwards(this->get_root_node(), (std::size_t)n); - if(cache_last && last){ - this->set_last_node(last); + node_ptr last_ = node_algorithms::move_backwards(this->get_root_node(), (std::size_t)n); + if(cache_last && last_){ + this->set_last_node(last_); } } diff --git a/3party/boost/boost/intrusive/splaytree.hpp b/3party/boost/boost/intrusive/splaytree.hpp index a1c5209dc1..7d41f69683 100644 --- a/3party/boost/boost/intrusive/splaytree.hpp +++ b/3party/boost/boost/intrusive/splaytree.hpp @@ -88,7 +88,7 @@ class splaytree_impl typedef typename Config::value_traits value_traits; /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits @@ -540,9 +540,9 @@ class splaytree_impl void insert_equal(Iterator b, Iterator e) { if(this->empty()){ - iterator end(this->end()); + iterator end_(this->end()); for (; b != e; ++b) - this->insert_equal(end, *b); + this->insert_equal(end_, *b); } } diff --git a/3party/boost/boost/intrusive/treap.hpp b/3party/boost/boost/intrusive/treap.hpp index b539acc569..99bdb69062 100644 --- a/3party/boost/boost/intrusive/treap.hpp +++ b/3party/boost/boost/intrusive/treap.hpp @@ -91,7 +91,7 @@ class treap_impl typedef typename Config::value_traits value_traits; /// @cond static const bool external_value_traits = - detail::external_value_traits_is_true::value; + detail::external_value_traits_bool_is_true::value; typedef typename detail::eval_if_c < external_value_traits , detail::eval_value_traits @@ -627,9 +627,9 @@ class treap_impl template void insert_equal(Iterator b, Iterator e) { - iterator end(this->end()); + iterator end_(this->end()); for (; b != e; ++b) - this->insert_equal(end, *b); + this->insert_equal(end_, *b); } //! Requires: value must be an lvalue @@ -696,9 +696,9 @@ class treap_impl void insert_unique(Iterator b, Iterator e) { if(this->empty()){ - iterator end(this->end()); + iterator end_(this->end()); for (; b != e; ++b) - this->insert_unique(end, *b); + this->insert_unique(end_, *b); } else{ for (; b != e; ++b) diff --git a/3party/boost/boost/iterator/function_input_iterator.hpp b/3party/boost/boost/iterator/function_input_iterator.hpp index 8f1df6828c..c4b5cb3994 100644 --- a/3party/boost/boost/iterator/function_input_iterator.hpp +++ b/3party/boost/boost/iterator/function_input_iterator.hpp @@ -1,4 +1,6 @@ // Copyright 2009 (C) Dean Michael Berris +// Copyright 2012 (C) Google, Inc. +// Copyright 2012 (C) Jeffrey Lee Hellrung, Jr. // 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) @@ -7,11 +9,14 @@ #ifndef BOOST_FUNCTION_INPUT_ITERATOR #define BOOST_FUNCTION_INPUT_ITERATOR +#include #include #include #include #include #include +#include +#include namespace boost { @@ -29,16 +34,19 @@ namespace boost { public: function_input_iterator() {} function_input_iterator(Function & f_, Input state_ = Input()) - : f(&f_), state(state_), value((*f)()) {} + : f(&f_), state(state_) {} void increment() { - value = (*f)(); + if(value) + value = none; + else + (*f)(); ++state; } typename Function::result_type const & dereference() const { - return value; + return (value ? value : value = (*f)()).get(); } bool equal(function_input_iterator const & other) const { @@ -48,7 +56,7 @@ namespace boost { private: Function * f; Input state; - typename Function::result_type value; + mutable optional value; }; template @@ -63,17 +71,19 @@ namespace boost { public: function_pointer_input_iterator() {} function_pointer_input_iterator(Function &f_, Input state_ = Input()) - : f(f_), state(state_), value((*f)()) - {} + : f(f_), state(state_) {} void increment() { - value = (*f)(); + if(value) + value = none; + else + (*f)(); ++state; } typename function_types::result_type::type const & dereference() const { - return value; + return (value ? value : value = (*f)()).get(); } bool equal(function_pointer_input_iterator const & other) const { @@ -83,7 +93,7 @@ namespace boost { private: Function f; Input state; - typename function_types::result_type::type value; + mutable optional::type> value; }; template diff --git a/3party/boost/boost/iterator/iterator_facade.hpp b/3party/boost/boost/iterator/iterator_facade.hpp index 1ca09028be..d84b402d59 100644 --- a/3party/boost/boost/iterator/iterator_facade.hpp +++ b/3party/boost/boost/iterator/iterator_facade.hpp @@ -147,7 +147,7 @@ namespace boost // Returning a mutable reference allows nonsense like // (*r++).mutate(), but it imposes fewer assumptions about the - // behavior of the value_type. In particular, recall taht + // behavior of the value_type. In particular, recall that // (*r).mutate() is legal if operator* returns by value. value_type& operator*() const @@ -294,7 +294,7 @@ namespace boost // operator->() needs special support for input iterators to strictly meet the // standard's requirements. If *i is not a reference type, we must still - // produce a lvalue to which a pointer can be formed. We do that by + // produce an lvalue to which a pointer can be formed. We do that by // returning a proxy object containing an instance of the reference object. template struct operator_arrow_dispatch // proxy references diff --git a/3party/boost/boost/iterator/reverse_iterator.hpp b/3party/boost/boost/iterator/reverse_iterator.hpp index 97b6b4861d..79cc7f2ca5 100644 --- a/3party/boost/boost/iterator/reverse_iterator.hpp +++ b/3party/boost/boost/iterator/reverse_iterator.hpp @@ -7,8 +7,8 @@ #ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP #define BOOST_REVERSE_ITERATOR_23022003THW_HPP +#include #include -#include #include namespace boost diff --git a/3party/boost/boost/lexical_cast.hpp b/3party/boost/boost/lexical_cast.hpp index acfc3e85f0..c475982a70 100644 --- a/3party/boost/boost/lexical_cast.hpp +++ b/3party/boost/boost/lexical_cast.hpp @@ -18,7 +18,7 @@ // with additional fixes and suggestions from Gennaro Prota, // Beman Dawes, Dave Abrahams, Daryle Walker, Peter Dimov, // Alexander Nasonov, Antony Polukhin, Justin Viiret, Michael Hofmann, -// Cheng Yang, Matthew Bradbury, David W. Birdsall and other Boosters +// Cheng Yang, Matthew Bradbury, David W. Birdsall, Pavel Korzh and other Boosters // when: November 2000, March 2003, June 2005, June 2006, March 2011 - 2012 #include @@ -47,8 +47,12 @@ # include #else # ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE -# warning "Unable to use header. boost::lexical_cast will use the 'C' locale." -# define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE + // Getting error at this point means, that your STL library is old/lame/misconfigured. + // If nothing can be done with STL library, define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE, + // but beware: lexical_cast will understand only 'C' locale delimeters and thousands + // separators. +# error "Unable to use header. Define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE to force " +# error "boost::lexical_cast to use only 'C' locale during conversions." # endif #endif @@ -83,7 +87,7 @@ namespace boost { public: - bad_lexical_cast() : + bad_lexical_cast() BOOST_NOEXCEPT : #ifndef BOOST_NO_TYPEID source(&typeid(void)), target(&typeid(void)) #else @@ -94,7 +98,7 @@ namespace boost bad_lexical_cast( const std::type_info &source_type_arg, - const std::type_info &target_type_arg) : + const std::type_info &target_type_arg) BOOST_NOEXCEPT : source(&source_type_arg), target(&target_type_arg) { } @@ -108,14 +112,22 @@ namespace boost return *target; } +#ifndef BOOST_NO_NOEXCEPT + virtual const char *what() const noexcept +#else virtual const char *what() const throw() +#endif { return "bad lexical cast: " "source type value could not be interpreted as target"; } + +#ifndef BOOST_NO_NOEXCEPT + virtual ~bad_lexical_cast() BOOST_NOEXCEPT +#else virtual ~bad_lexical_cast() throw() - { - } +#endif + {} private: const std::type_info *source; const std::type_info *target; @@ -570,10 +582,10 @@ namespace boost { #endif template inline - BOOST_DEDUCED_TYPENAME make_unsigned::type lcast_to_unsigned(T value) + BOOST_DEDUCED_TYPENAME make_unsigned::type lcast_to_unsigned(T value) BOOST_NOEXCEPT { typedef BOOST_DEDUCED_TYPENAME make_unsigned::type result_type; - result_type uvalue = static_cast(value); + const result_type uvalue = static_cast(value); return value < 0 ? -uvalue : uvalue; } #if (defined _MSC_VER) @@ -777,7 +789,7 @@ namespace boost { namespace detail { template - bool lc_iequal(const CharT* val, const CharT* lcase, const CharT* ucase, unsigned int len) { + bool lc_iequal(const CharT* val, const CharT* lcase, const CharT* ucase, unsigned int len) BOOST_NOEXCEPT { for( unsigned int i=0; i < len; ++i ) { if ( val[i] != lcase[i] && val[i] != ucase[i] ) return false; } @@ -790,7 +802,7 @@ namespace boost { inline bool parse_inf_nan_impl(const CharT* begin, const CharT* end, T& value , const CharT* lc_NAN, const CharT* lc_nan , const CharT* lc_INFINITY, const CharT* lc_infinity - , const CharT opening_brace, const CharT closing_brace) + , const CharT opening_brace, const CharT closing_brace) BOOST_NOEXCEPT { using namespace std; if (begin == end) return false; @@ -846,7 +858,7 @@ namespace boost { template bool put_inf_nan_impl(CharT* begin, CharT*& end, const T& value , const CharT* lc_nan - , const CharT* lc_infinity) + , const CharT* lc_infinity) BOOST_NOEXCEPT { using namespace std; const CharT minus = lcast_char_constants::minus; @@ -880,7 +892,7 @@ namespace boost { #ifndef BOOST_LCAST_NO_WCHAR_T template - bool parse_inf_nan(const wchar_t* begin, const wchar_t* end, T& value) + bool parse_inf_nan(const wchar_t* begin, const wchar_t* end, T& value) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , L"NAN", L"nan" @@ -889,7 +901,7 @@ namespace boost { } template - bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value) + bool put_inf_nan(wchar_t* begin, wchar_t*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, L"nan", L"infinity"); } @@ -897,7 +909,7 @@ namespace boost { #endif #if !defined(BOOST_NO_CHAR16_T) && !defined(BOOST_NO_UNICODE_LITERALS) template - bool parse_inf_nan(const char16_t* begin, const char16_t* end, T& value) + bool parse_inf_nan(const char16_t* begin, const char16_t* end, T& value) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , u"NAN", u"nan" @@ -906,14 +918,14 @@ namespace boost { } template - bool put_inf_nan(char16_t* begin, char16_t*& end, const T& value) + bool put_inf_nan(char16_t* begin, char16_t*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, u"nan", u"infinity"); } #endif #if !defined(BOOST_NO_CHAR32_T) && !defined(BOOST_NO_UNICODE_LITERALS) template - bool parse_inf_nan(const char32_t* begin, const char32_t* end, T& value) + bool parse_inf_nan(const char32_t* begin, const char32_t* end, T& value) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , U"NAN", U"nan" @@ -922,14 +934,14 @@ namespace boost { } template - bool put_inf_nan(char32_t* begin, char32_t*& end, const T& value) + bool put_inf_nan(char32_t* begin, char32_t*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, U"nan", U"infinity"); } #endif template - bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) + bool parse_inf_nan(const CharT* begin, const CharT* end, T& value) BOOST_NOEXCEPT { return parse_inf_nan_impl(begin, end, value , "NAN", "nan" @@ -938,7 +950,7 @@ namespace boost { } template - bool put_inf_nan(CharT* begin, CharT*& end, const T& value) + bool put_inf_nan(CharT* begin, CharT*& end, const T& value) BOOST_NOEXCEPT { return put_inf_nan_impl(begin, end, value, "nan", "infinity"); } @@ -1008,11 +1020,11 @@ namespace boost { /* Getting the plus/minus sign */ bool has_minus = false; - if ( *begin == minus ) { + if (Traits::eq(*begin, minus) ) { ++ begin; has_minus = true; if (begin == end) return false; - } else if ( *begin == plus ) { + } else if (Traits::eq(*begin, plus) ) { ++begin; if (begin == end) return false; } @@ -1031,7 +1043,7 @@ namespace boost { /* We allow no thousand_separators after decimal point */ mantissa_type tmp_mantissa = mantissa * 10u; - if ( *begin == lowercase_e || *begin == capital_e ) break; + if (Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) break; if ( *begin < czero || *begin >= czero + 10 ) return false; if ( is_mantissa_full || tmp_mantissa / 10u != mantissa @@ -1070,7 +1082,7 @@ namespace boost { found_number_before_exp = true; ++ length_since_last_delim; - } else if ( *begin == decimal_point || *begin == lowercase_e || *begin == capital_e) { + } else if (Traits::eq(*begin, decimal_point) || Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) { #ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE /* If ( we need to check grouping * and ( grouping missmatches @@ -1088,7 +1100,7 @@ namespace boost { ) return false; #endif - if(*begin == decimal_point) { + if(Traits::eq(*begin, decimal_point)) { ++ begin; found_decimal = true; if (!found_number_before_exp && begin==end) return false; @@ -1099,7 +1111,7 @@ namespace boost { } } #ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE - else if (grouping_size && *begin == thousands_sep){ + else if (grouping_size && Traits::eq(*begin, thousands_sep)){ if(found_grouping) { /* It is not he first time, when we find thousands separator, @@ -1141,16 +1153,16 @@ namespace boost { } // Exponent found - if ( begin != end && ( *begin == lowercase_e || *begin == capital_e ) ) { + if ( begin != end && (Traits::eq(*begin, lowercase_e) || Traits::eq(*begin, capital_e)) ) { ++ begin; if ( begin == end ) return false; bool exp_has_minus = false; - if( *begin == minus ) { + if(Traits::eq(*begin, minus)) { exp_has_minus = true; ++ begin; if ( begin == end ) return false; - } else if (*begin == plus ) { + } else if (Traits::eq(*begin, plus)) { ++ begin; if ( begin == end ) return false; } @@ -1258,7 +1270,7 @@ namespace boost { void operator=(lexical_stream_limited_src const&); /************************************ HELPER FUNCTIONS FOR OPERATORS << ( ... ) ********************************/ - bool shl_char(CharT ch) + bool shl_char(CharT ch) BOOST_NOEXCEPT { Traits::assign(*start, ch); finish = start + 1; @@ -1270,13 +1282,13 @@ namespace boost { bool shl_char(T ch) { BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)) , - "boost::lexical_cast does not support conversions from wide character to char types." + "boost::lexical_cast does not support narrowing of char types." "Use boost::locale instead" ); #ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE std::locale loc; - wchar_t w = BOOST_USE_FACET(std::ctype, loc).widen(ch); + CharT const w = BOOST_USE_FACET(std::ctype, loc).widen(ch); #else - wchar_t w = ch; + CharT const w = ch; #endif Traits::assign(*start, w); finish = start + 1; @@ -1284,7 +1296,7 @@ namespace boost { } #endif - bool shl_char_array(CharT const* str) + bool shl_char_array(CharT const* str) BOOST_NOEXCEPT { start = const_cast(str); finish = start + Traits::length(str); @@ -1295,15 +1307,15 @@ namespace boost { bool shl_char_array(T const* str) { BOOST_STATIC_ASSERT_MSG(( sizeof(T) <= sizeof(CharT)), - "boost::lexical_cast does not support conversions from wide characters to char types." + "boost::lexical_cast does not support narrowing of char types." "Use boost::locale instead" ); return shl_input_streamable(str); } - bool shl_char_array_limited(CharT const* str, std::size_t max_size) + bool shl_char_array_limited(CharT const* str, std::size_t max_size) BOOST_NOEXCEPT { start = const_cast(str); - finish = std::find(start, start + max_size, static_cast(0)); + finish = std::find(start, start + max_size, Traits::to_char_type(0)); return true; } @@ -1349,7 +1361,7 @@ namespace boost { if (put_inf_nan(begin, end, val)) return true; const double val_as_double = val; end = begin + -#if (defined _MSC_VER) +#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) sprintf_s(begin, end-begin, #else sprintf(begin, @@ -1362,7 +1374,7 @@ namespace boost { { using namespace std; if (put_inf_nan(begin, end, val)) return true; end = begin + -#if (defined _MSC_VER) +#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) sprintf_s(begin, end-begin, #else sprintf(begin, @@ -1376,7 +1388,7 @@ namespace boost { { using namespace std; if (put_inf_nan(begin, end, val)) return true; end = begin + -#if (defined _MSC_VER) +#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) sprintf_s(begin, end-begin, #else sprintf(begin, @@ -1419,7 +1431,7 @@ namespace boost { /************************************ OPERATORS << ( ... ) ********************************/ public: template - bool operator<<(std::basic_string const& str) + bool operator<<(std::basic_string const& str) BOOST_NOEXCEPT { start = const_cast(str.data()); finish = start + str.length(); @@ -1427,14 +1439,14 @@ namespace boost { } template - bool operator<<(::boost::container::basic_string const& str) + bool operator<<(::boost::container::basic_string const& str) BOOST_NOEXCEPT { start = const_cast(str.data()); finish = start + str.length(); return true; } - bool operator<<(bool value) + bool operator<<(bool value) BOOST_NOEXCEPT { CharT const czero = lcast_char_constants::zero; Traits::assign(*start, Traits::to_char_type(czero + value)); @@ -1442,21 +1454,21 @@ namespace boost { return true; } - bool operator<<(const iterator_range& rng) + bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { start = rng.begin(); finish = rng.end(); return true; } - bool operator<<(const iterator_range& rng) + bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { start = const_cast(rng.begin()); finish = const_cast(rng.end()); return true; } - bool operator<<(const iterator_range& rng) + bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( const_cast(reinterpret_cast(rng.begin())), @@ -1464,7 +1476,7 @@ namespace boost { ); } - bool operator<<(const iterator_range& rng) + bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( const_cast(reinterpret_cast(rng.begin())), @@ -1472,7 +1484,7 @@ namespace boost { ); } - bool operator<<(const iterator_range& rng) + bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( reinterpret_cast(rng.begin()), @@ -1480,7 +1492,7 @@ namespace boost { ); } - bool operator<<(const iterator_range& rng) + bool operator<<(const iterator_range& rng) BOOST_NOEXCEPT { return (*this) << iterator_range( reinterpret_cast(rng.begin()), @@ -1539,52 +1551,52 @@ namespace boost { } template - bool operator<<(boost::array const& input) + bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return shl_char_array_limited(input.begin(), N); } template - bool operator<<(boost::array const& input) + bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template - bool operator<<(boost::array const& input) + bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template - bool operator<<(boost::array const& input) + bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return shl_char_array_limited(input.begin(), N); } template - bool operator<<(boost::array const& input) + bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template - bool operator<<(boost::array const& input) + bool operator<<(boost::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } #if !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY) template - bool operator<<(std::array const& input) + bool operator<<(std::array const& input) BOOST_NOEXCEPT { return shl_char_array_limited(input.begin(), N); } template - bool operator<<(std::array const& input) + bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template - bool operator<<(std::array const& input) + bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template - bool operator<<(std::array const& input) + bool operator<<(std::array const& input) BOOST_NOEXCEPT { return shl_char_array_limited(input.begin(), N); } template - bool operator<<(std::array const& input) + bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } template - bool operator<<(std::array const& input) + bool operator<<(std::array const& input) BOOST_NOEXCEPT { return ((*this) << reinterpret_cast const& >(input)); } #endif // !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY) @@ -1723,10 +1735,10 @@ namespace boost { inline bool shr_xchar(T& output) { BOOST_STATIC_ASSERT_MSG(( sizeof(CharT) == sizeof(T) ), - "boost::lexical_cast does not support conversions from wchar_t to char types." + "boost::lexical_cast does not support narrowing of character types." "Use boost::locale instead" ); bool const ok = (finish - start == 1); - if(ok) { + if (ok) { CharT out; Traits::assign(out, *start); output = static_cast(out); @@ -1770,7 +1782,7 @@ namespace boost { private: template - bool shr_std_array(ArrayT& output, boost::mpl::bool_ /*is_T_char_tag*/) + bool shr_std_array(ArrayT& output) BOOST_NOEXCEPT { using namespace std; const std::size_t size = finish - start; @@ -1779,22 +1791,16 @@ namespace boost { } memcpy(output.begin(), start, size * sizeof(CharT)); - *(output.begin() + size) = static_cast(0); + *(output.begin() + size) = Traits::to_char_type(0); return true; } - template - bool shr_std_array(ArrayT& output, boost::mpl::bool_ /*is_T_char_tag*/) - { - return shr_using_base_class(output); // Array consist of non character types or unmatching character type - } public: template - bool operator>>(boost::array& output) + bool operator>>(boost::array& output) BOOST_NOEXCEPT { - typedef boost::mpl::bool_ tag_type; - return shr_std_array(output, tag_type()); + return shr_std_array(output); } template @@ -1811,10 +1817,9 @@ namespace boost { #if !defined(BOOST_NO_CXX11_HDR_ARRAY) && defined(BOOST_HAS_TR1_ARRAY) template - bool operator>>(std::array& output) + bool operator>>(std::array& output) BOOST_NOEXCEPT { - typedef boost::mpl::bool_ tag_type; - return shr_std_array(output, tag_type()); + return shr_std_array(output); } template @@ -1836,7 +1841,7 @@ namespace boost { * case "1" || "+1": output = true; return true; * default: return false; */ - bool operator>>(bool& output) + bool operator>>(bool& output) BOOST_NOEXCEPT { CharT const zero = lcast_char_constants::zero; CharT const plus = lcast_char_constants::plus; @@ -1886,10 +1891,10 @@ namespace boost { CharT const lowercase_e = lcast_char_constants::lowercase_e; if ( return_value && ( - *(finish-1) == lowercase_e // 1.0e - || *(finish-1) == capital_e // 1.0E - || *(finish-1) == minus // 1.0e- or 1.0E- - || *(finish-1) == plus // 1.0e+ or 1.0E+ + Traits::eq(*(finish-1), lowercase_e) // 1.0e + || Traits::eq(*(finish-1), capital_e) // 1.0E + || Traits::eq(*(finish-1), minus) // 1.0e- or 1.0E- + || Traits::eq(*(finish-1), plus) // 1.0e+ or 1.0E+ ) ) return false; @@ -2145,7 +2150,7 @@ namespace boost { template struct lexical_cast_copy { - static inline Source lexical_cast_impl(const Source &arg) + static inline const Source& lexical_cast_impl(const Source &arg) BOOST_NOEXCEPT { return arg; } @@ -2295,6 +2300,59 @@ namespace boost { return caster_type::lexical_cast_impl(arg); } + template + inline Target lexical_cast(const char* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } + + + template + inline Target lexical_cast(const unsigned char* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } + + template + inline Target lexical_cast(const signed char* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } + +#ifndef BOOST_LCAST_NO_WCHAR_T + template + inline Target lexical_cast(const wchar_t* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } +#endif +#ifndef BOOST_NO_CHAR16_T + template + inline Target lexical_cast(const char16_t* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } +#endif +#ifndef BOOST_NO_CHAR32_T + template + inline Target lexical_cast(const char32_t* chars, std::size_t count) + { + return ::boost::lexical_cast( + ::boost::iterator_range(chars, chars + count) + ); + } +#endif + } // namespace boost #else // #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION diff --git a/3party/boost/boost/math/bindings/e_float.hpp b/3party/boost/boost/math/bindings/e_float.hpp index d7f9a73508..b1dd7dc1d9 100644 --- a/3party/boost/boost/math/bindings/e_float.hpp +++ b/3party/boost/boost/math/bindings/e_float.hpp @@ -714,7 +714,7 @@ boost::math::ef::e_float bessel_i0(boost::math::ef::e_float x) } else // x in (15, \infty) { - boost::math::ef::e_float y = 1 / x - 1 / 15; + boost::math::ef::e_float y = 1 / x - boost::math::ef::e_float(1) / 15; r = evaluate_polynomial(P2, y) / evaluate_polynomial(Q2, y); factor = exp(x) / sqrt(x); value = factor * r; diff --git a/3party/boost/boost/math/bindings/mpfr.hpp b/3party/boost/boost/math/bindings/mpfr.hpp index e5c6ba071d..679b83e35e 100644 --- a/3party/boost/boost/math/bindings/mpfr.hpp +++ b/3party/boost/boost/math/bindings/mpfr.hpp @@ -771,7 +771,7 @@ inline mpfr_class bessel_i0(mpfr_class x) } else // x in (15, \infty) { - mpfr_class y = 1 / x - 1 / 15; + mpfr_class y = 1 / x - mpfr_class(1) / 15; r = evaluate_polynomial(P2, y) / evaluate_polynomial(Q2, y); factor = exp(x) / sqrt(x); value = factor * r; diff --git a/3party/boost/boost/math/bindings/mpreal.hpp b/3party/boost/boost/math/bindings/mpreal.hpp index 82f7950b92..b63c024f24 100644 --- a/3party/boost/boost/math/bindings/mpreal.hpp +++ b/3party/boost/boost/math/bindings/mpreal.hpp @@ -802,7 +802,7 @@ mpfr::mpreal bessel_i0(mpfr::mpreal x) } else // x in (15, \infty) { - mpfr::mpreal y = 1 / x - 1 / 15; + mpfr::mpreal y = 1 / x - mpfr::mpreal(1) / 15; r = evaluate_polynomial(P2, y) / evaluate_polynomial(Q2, y); factor = exp(x) / sqrt(x); value = factor * r; diff --git a/3party/boost/boost/math/constants/calculate_constants.hpp b/3party/boost/boost/math/constants/calculate_constants.hpp index 0b78929e71..2cdcd8e097 100644 --- a/3party/boost/boost/math/constants/calculate_constants.hpp +++ b/3party/boost/boost/math/constants/calculate_constants.hpp @@ -85,6 +85,7 @@ template // sqrt(2/pi) template inline T constant_root_two_div_pi::compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(mpl::int_)) { + BOOST_MATH_STD_USING return sqrt((2 / pi > >())); } @@ -595,7 +596,7 @@ inline T constant_zeta_three::compute(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC( //"1.202056903159594285399738161511449990, 76498629234049888179227155534183820578631309018645587360933525814619915" A002117 // 1.202056903159594285399738161511449990, 76498629234049888179227155534183820578631309018645587360933525814619915780, +00); //"1.2020569031595942 double - // http://www.spaennare.se/SSPROG/ssnum.pdf // section 11, Algorithmfor Apery’s constant zeta(3). + // http://www.spaennare.se/SSPROG/ssnum.pdf // section 11, Algorithm for Apery's constant zeta(3). // Programs to Calculate some Mathematical Constants to Large Precision, Document Version 1.50 // by Stefan Spannare September 19, 2007 diff --git a/3party/boost/boost/math/distributions.hpp b/3party/boost/boost/math/distributions.hpp index 37cf027a80..91d6a8b4b8 100644 --- a/3party/boost/boost/math/distributions.hpp +++ b/3party/boost/boost/math/distributions.hpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include diff --git a/3party/boost/boost/math/distributions/beta.hpp b/3party/boost/boost/math/distributions/beta.hpp index cfadd7bff5..d525ace23a 100644 --- a/3party/boost/boost/math/distributions/beta.hpp +++ b/3party/boost/boost/math/distributions/beta.hpp @@ -189,11 +189,10 @@ namespace boost static const char* function = "boost::math::beta_distribution<%1%>::find_alpha"; RealType result = 0; // of error checks. if(false == - beta_detail::check_mean( - function, mean, &result, Policy()) - && - beta_detail::check_variance( - function, variance, &result, Policy()) + ( + beta_detail::check_mean(function, mean, &result, Policy()) + && beta_detail::check_variance(function, variance, &result, Policy()) + ) ) { return result; @@ -208,11 +207,11 @@ namespace boost static const char* function = "boost::math::beta_distribution<%1%>::find_beta"; RealType result = 0; // of error checks. if(false == - beta_detail::check_mean( - function, mean, &result, Policy()) - && - beta_detail::check_variance( - function, variance, &result, Policy()) + ( + beta_detail::check_mean(function, mean, &result, Policy()) + && + beta_detail::check_variance(function, variance, &result, Policy()) + ) ) { return result; @@ -231,14 +230,13 @@ namespace boost static const char* function = "boost::math::beta_distribution<%1%>::find_alpha"; RealType result = 0; // of error checks. if(false == - beta_detail::check_prob( - function, probability, &result, Policy()) - && - beta_detail::check_beta( - function, beta, &result, Policy()) - && - beta_detail::check_x( - function, x, &result, Policy()) + ( + beta_detail::check_prob(function, probability, &result, Policy()) + && + beta_detail::check_beta(function, beta, &result, Policy()) + && + beta_detail::check_x(function, x, &result, Policy()) + ) ) { return result; @@ -255,14 +253,13 @@ namespace boost static const char* function = "boost::math::beta_distribution<%1%>::find_beta"; RealType result = 0; // of error checks. if(false == - beta_detail::check_prob( - function, probability, &result, Policy()) - && - beta_detail::check_alpha( - function, alpha, &result, Policy()) - && - beta_detail::check_x( - function, x, &result, Policy()) + ( + beta_detail::check_prob(function, probability, &result, Policy()) + && + beta_detail::check_alpha(function, alpha, &result, Policy()) + && + beta_detail::check_x(function, x, &result, Policy()) + ) ) { return result; diff --git a/3party/boost/boost/math/distributions/cauchy.hpp b/3party/boost/boost/math/distributions/cauchy.hpp index 0c93febaa5..0e8c1deeda 100644 --- a/3party/boost/boost/math/distributions/cauchy.hpp +++ b/3party/boost/boost/math/distributions/cauchy.hpp @@ -180,15 +180,30 @@ typedef cauchy_distribution cauchy; template inline const std::pair range(const cauchy_distribution&) { // Range of permissible values for random variable x. + if (std::numeric_limits::has_infinity) + { + return std::pair(-std::numeric_limits::infinity(), std::numeric_limits::infinity()); // - to + infinity. + } + else + { // Can only use max_value. using boost::math::tools::max_value; - return std::pair(-max_value(), max_value()); // - to + infinity. + return std::pair(-max_value(), max_value()); // - to + max. + } } template inline const std::pair support(const cauchy_distribution& ) { // Range of supported values for random variable x. // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero. - return std::pair(-tools::max_value(), tools::max_value()); // - to + infinity. + if (std::numeric_limits::has_infinity) + { + return std::pair(-std::numeric_limits::infinity(), std::numeric_limits::infinity()); // - to + infinity. + } + else + { // Can only use max_value. + using boost::math::tools::max_value; + return std::pair(-tools::max_value(), max_value()); // - to + max. + } } template diff --git a/3party/boost/boost/math/distributions/chi_squared.hpp b/3party/boost/boost/math/distributions/chi_squared.hpp index 367a7154a3..51b80de529 100644 --- a/3party/boost/boost/math/distributions/chi_squared.hpp +++ b/3party/boost/boost/math/distributions/chi_squared.hpp @@ -50,7 +50,7 @@ private: // // Data member: // - RealType m_df; // degrees of freedom are a real number. + RealType m_df; // degrees of freedom is a positive real number. }; // class chi_squared_distribution typedef chi_squared_distribution chi_squared; @@ -58,8 +58,15 @@ typedef chi_squared_distribution chi_squared; template inline const std::pair range(const chi_squared_distribution& /*dist*/) { // Range of permissible values for random variable x. - using boost::math::tools::max_value; - return std::pair(static_cast(0), max_value()); // 0 to + infinity. + if (std::numeric_limits::has_infinity) + { + return std::pair(static_cast(0), std::numeric_limits::infinity()); // 0 to + infinity. + } + else + { + using boost::math::tools::max_value; + return std::pair(static_cast(0), max_value()); // 0 to + max. + } } template @@ -138,11 +145,12 @@ inline RealType quantile(const chi_squared_distribution& dist, static const char* function = "boost::math::quantile(const chi_squared_distribution<%1%>&, %1%)"; // Error check: RealType error_result; - if(false == detail::check_df( - function, degrees_of_freedom, &error_result, Policy()) - && detail::check_probability( - function, p, &error_result, Policy())) - return error_result; + if(false == + ( + detail::check_df(function, degrees_of_freedom, &error_result, Policy()) + && detail::check_probability(function, p, &error_result, Policy())) + ) + return error_result; return 2 * boost::math::gamma_p_inv(degrees_of_freedom / 2, p, Policy()); } // quantile @@ -176,11 +184,11 @@ inline RealType quantile(const complemented2_type #include // using boost::math::isfinite; +// using boost::math::isnan; namespace boost{ namespace math{ namespace detail { @@ -31,7 +32,7 @@ inline bool check_probability(const char* function, RealType const& prob, RealTy template inline bool check_df(const char* function, RealType const& df, RealType* result, const Policy& pol) -{ +{ // df > 0 but NOT +infinity allowed. if((df <= 0) || !(boost::math::isfinite)(df)) { *result = policies::raise_domain_error( @@ -42,6 +43,20 @@ inline bool check_df(const char* function, RealType const& df, RealType* result, return true; } +template +inline bool check_df_gt0_to_inf(const char* function, RealType const& df, RealType* result, const Policy& pol) +{ // df > 0 or +infinity are allowed. + if( (df <= 0) || (boost::math::isnan)(df) ) + { // is bad df <= 0 or NaN or -infinity. + *result = policies::raise_domain_error( + function, + "Degrees of freedom argument is %1%, but must be > 0 !", df, pol); + return false; + } + return true; +} // check_df_gt0_to_inf + + template inline bool check_scale( const char* function, diff --git a/3party/boost/boost/math/distributions/exponential.hpp b/3party/boost/boost/math/distributions/exponential.hpp index 62b858c873..47e419847f 100644 --- a/3party/boost/boost/math/distributions/exponential.hpp +++ b/3party/boost/boost/math/distributions/exponential.hpp @@ -16,6 +16,7 @@ #ifdef BOOST_MSVC # pragma warning(push) +# pragma warning(disable: 4127) // conditional expression is constant # pragma warning(disable: 4702) // unreachable code (return after domain_error throw). #endif @@ -30,7 +31,7 @@ namespace detail{ template inline bool verify_lambda(const char* function, RealType l, RealType* presult, const Policy& pol) { - if(l <= 0) + if((l <= 0) || !(boost::math::isfinite)(l)) { *presult = policies::raise_domain_error( function, @@ -43,7 +44,7 @@ inline bool verify_lambda(const char* function, RealType l, RealType* presult, c template inline bool verify_exp_x(const char* function, RealType x, RealType* presult, const Policy& pol) { - if(x < 0) + if((x < 0) || (boost::math::isnan)(x)) { *presult = policies::raise_domain_error( function, @@ -80,8 +81,15 @@ typedef exponential_distribution exponential; template inline const std::pair range(const exponential_distribution& /*dist*/) { // Range of permissible values for random variable x. + if (std::numeric_limits::has_infinity) + { + return std::pair(static_cast(0), std::numeric_limits::infinity()); // 0 to + infinity. + } + else + { using boost::math::tools::max_value; - return std::pair(static_cast(0), max_value()); + return std::pair(static_cast(0), max_value()); // 0 to + max + } } template diff --git a/3party/boost/boost/math/distributions/extreme_value.hpp b/3party/boost/boost/math/distributions/extreme_value.hpp index 3cf94d4b39..ef9fbe817d 100644 --- a/3party/boost/boost/math/distributions/extreme_value.hpp +++ b/3party/boost/boost/math/distributions/extreme_value.hpp @@ -37,11 +37,11 @@ namespace detail{ template inline bool verify_scale_b(const char* function, RealType b, RealType* presult, const Policy& pol) { - if(b <= 0) + if((b <= 0) || !(boost::math::isfinite)(b)) { *presult = policies::raise_domain_error( function, - "The scale parameter \"b\" must be > 0, but was: %1%.", b, pol); + "The scale parameter \"b\" must be finite and > 0, but was: %1%.", b, pol); return false; } return true; @@ -61,6 +61,7 @@ public: { RealType err; detail::verify_scale_b("boost::math::extreme_value_distribution<%1%>::extreme_value_distribution", b, &err, Policy()); + detail::check_finite("boost::math::extreme_value_distribution<%1%>::extreme_value_distribution", a, &err, Policy()); } // extreme_value_distribution RealType location()const { return m_a; } @@ -76,7 +77,9 @@ template inline const std::pair range(const extreme_value_distribution& /*dist*/) { // Range of permissible values for random variable x. using boost::math::tools::max_value; - return std::pair(-max_value(), max_value()); + return std::pair( + std::numeric_limits::has_infinity ? -std::numeric_limits::infinity() : -max_value(), + std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : max_value()); } template @@ -92,10 +95,18 @@ inline RealType pdf(const extreme_value_distribution& dist, co { BOOST_MATH_STD_USING // for ADL of std functions + static const char* function = "boost::math::pdf(const extreme_value_distribution<%1%>&, %1%)"; + RealType a = dist.location(); RealType b = dist.scale(); RealType result = 0; - if(0 == detail::verify_scale_b("boost::math::pdf(const extreme_value_distribution<%1%>&, %1%)", b, &result, Policy())) + if((boost::math::isinf)(x)) + return 0.0f; + if(0 == detail::verify_scale_b(function, b, &result, Policy())) + return result; + if(0 == detail::check_finite(function, a, &result, Policy())) + return result; + if(0 == detail::check_x(function, x, &result, Policy())) return result; result = exp((a-x)/b) * exp(-exp((a-x)/b)) / b; return result; @@ -106,10 +117,20 @@ inline RealType cdf(const extreme_value_distribution& dist, co { BOOST_MATH_STD_USING // for ADL of std functions + static const char* function = "boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)"; + + if((boost::math::isinf)(x)) + return x < 0 ? 0.0f : 1.0f; RealType a = dist.location(); RealType b = dist.scale(); RealType result = 0; - if(0 == detail::verify_scale_b("boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)", b, &result, Policy())) + if(0 == detail::verify_scale_b(function, b, &result, Policy())) + return result; + if(0 == detail::check_finite(function, a, &result, Policy())) + return result; + if(0 == detail::check_finite(function, a, &result, Policy())) + return result; + if(0 == detail::check_x("boost::math::cdf(const extreme_value_distribution<%1%>&, %1%)", x, &result, Policy())) return result; result = exp(-exp((a-x)/b)); @@ -129,6 +150,8 @@ RealType quantile(const extreme_value_distribution& dist, cons RealType result = 0; if(0 == detail::verify_scale_b(function, b, &result, Policy())) return result; + if(0 == detail::check_finite(function, a, &result, Policy())) + return result; if(0 == detail::check_probability(function, p, &result, Policy())) return result; @@ -147,10 +170,18 @@ inline RealType cdf(const complemented2_type&, %1%)", b, &result, Policy())) + if(0 == detail::verify_scale_b(function, b, &result, Policy())) + return result; + if(0 == detail::check_finite(function, a, &result, Policy())) + return result; + if(0 == detail::check_x(function, c.param, &result, Policy())) return result; result = -boost::math::expm1(-exp((a-c.param)/b), Policy()); @@ -171,6 +202,8 @@ RealType quantile(const complemented2_type& dist) RealType result = 0; if(0 == detail::verify_scale_b("boost::math::mean(const extreme_value_distribution<%1%>&)", b, &result, Policy())) return result; + if(0 == detail::check_scale("boost::math::mean(const extreme_value_distribution<%1%>&)", a, &result, Policy())) + return result; return a + constants::euler() * b; } @@ -204,6 +239,8 @@ inline RealType standard_deviation(const extreme_value_distribution&)", b, &result, Policy())) return result; + if(0 == detail::check_scale("boost::math::standard_deviation(const extreme_value_distribution<%1%>&)", dist.location(), &result, Policy())) + return result; return constants::pi() * b / sqrt(static_cast(6)); } diff --git a/3party/boost/boost/math/distributions/fisher_f.hpp b/3party/boost/boost/math/distributions/fisher_f.hpp index 07bcc81a6a..9e259bcc96 100644 --- a/3party/boost/boost/math/distributions/fisher_f.hpp +++ b/3party/boost/boost/math/distributions/fisher_f.hpp @@ -169,12 +169,12 @@ inline RealType quantile(const fisher_f_distribution& dist, co RealType df2 = dist.degrees_of_freedom2(); // Error check: RealType error_result = 0; - if(false == detail::check_df( + if(false == (detail::check_df( function, df1, &error_result, Policy()) && detail::check_df( function, df2, &error_result, Policy()) && detail::check_probability( - function, p, &error_result, Policy())) + function, p, &error_result, Policy()))) return error_result; // With optimizations turned on, gcc wrongly warns about y being used @@ -231,12 +231,12 @@ inline RealType quantile(const complemented2_type& dist, return result; } // cdf -template +template struct inverse_gaussian_quantile_functor { - inverse_gaussian_quantile_functor(const boost::math::inverse_gaussian_distribution dist, RealType const& p) + inverse_gaussian_quantile_functor(const boost::math::inverse_gaussian_distribution dist, RealType const& p) : distribution(dist), prob(p) { } @@ -224,14 +224,14 @@ struct inverse_gaussian_quantile_functor return boost::math::make_tuple(fx, dx); } private: - const boost::math::inverse_gaussian_distribution distribution; + const boost::math::inverse_gaussian_distribution distribution; RealType prob; }; -template +template struct inverse_gaussian_quantile_complement_functor { - inverse_gaussian_quantile_complement_functor(const boost::math::inverse_gaussian_distribution dist, RealType const& p) + inverse_gaussian_quantile_complement_functor(const boost::math::inverse_gaussian_distribution dist, RealType const& p) : distribution(dist), prob(p) { } @@ -245,7 +245,7 @@ struct inverse_gaussian_quantile_complement_functor return boost::math::make_tuple(fx, dx); } private: - const boost::math::inverse_gaussian_distribution distribution; + const boost::math::inverse_gaussian_distribution distribution; RealType prob; }; @@ -347,7 +347,7 @@ inline RealType quantile(const inverse_gaussian_distribution& boost::uintmax_t m = policies::get_max_root_iterations(); // and max iterations. using boost::math::tools::newton_raphson_iterate; result = - newton_raphson_iterate(inverse_gaussian_quantile_functor(dist, p), guess, min, max, get_digits, m); + newton_raphson_iterate(inverse_gaussian_quantile_functor(dist, p), guess, min, max, get_digits, m); return result; } // quantile @@ -380,7 +380,7 @@ inline RealType cdf(const complemented2_type n01; @@ -428,7 +428,7 @@ inline RealType quantile(const complemented2_type(); using boost::math::tools::newton_raphson_iterate; result = - newton_raphson_iterate(inverse_gaussian_quantile_complement_functor(c.dist, q), guess, min, max, get_digits, m); + newton_raphson_iterate(inverse_gaussian_quantile_complement_functor(c.dist, q), guess, min, max, get_digits, m); return result; } // quantile diff --git a/3party/boost/boost/math/distributions/logistic.hpp b/3party/boost/boost/math/distributions/logistic.hpp index e48f0b4f49..f372faf6e9 100644 --- a/3party/boost/boost/math/distributions/logistic.hpp +++ b/3party/boost/boost/math/distributions/logistic.hpp @@ -5,6 +5,9 @@ // (See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_MATH_DISTRIBUTIONS_LOGISTIC +#define BOOST_MATH_DISTRIBUTIONS_LOGISTIC + #include #include #include @@ -53,7 +56,9 @@ namespace boost { namespace math { inline const std::pair range(const logistic_distribution& /* dist */) { // Range of permissible values for random variable x. using boost::math::tools::max_value; - return std::pair(-max_value(), max_value()); // - to + infinity + return std::pair( + std::numeric_limits::has_infinity ? -std::numeric_limits::infinity() : -max_value(), + std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : max_value()); } template @@ -285,3 +290,4 @@ namespace boost { namespace math { // Must come at the end: #include +#endif // BOOST_MATH_DISTRIBUTIONS_LOGISTIC diff --git a/3party/boost/boost/math/distributions/lognormal.hpp b/3party/boost/boost/math/distributions/lognormal.hpp index a6cfa17a2e..55e80962a0 100644 --- a/3party/boost/boost/math/distributions/lognormal.hpp +++ b/3party/boost/boost/math/distributions/lognormal.hpp @@ -53,6 +53,7 @@ public: { RealType result; detail::check_scale("boost::math::lognormal_distribution<%1%>::lognormal_distribution", scale, &result, Policy()); + detail::check_location("boost::math::lognormal_distribution<%1%>::lognormal_distribution", location, &result, Policy()); } RealType location()const @@ -102,6 +103,8 @@ RealType pdf(const lognormal_distribution& dist, const RealTyp RealType result = 0; if(0 == detail::check_scale(function, sigma, &result, Policy())) return result; + if(0 == detail::check_location(function, mu, &result, Policy())) + return result; if(0 == detail::check_lognormal_x(function, x, &result, Policy())) return result; @@ -126,6 +129,10 @@ inline RealType cdf(const lognormal_distribution& dist, const static const char* function = "boost::math::cdf(const lognormal_distribution<%1%>&, %1%)"; RealType result = 0; + if(0 == detail::check_scale(function, dist.scale(), &result, Policy())) + return result; + if(0 == detail::check_location(function, dist.location(), &result, Policy())) + return result; if(0 == detail::check_lognormal_x(function, x, &result, Policy())) return result; @@ -144,6 +151,10 @@ inline RealType quantile(const lognormal_distribution& dist, c static const char* function = "boost::math::quantile(const lognormal_distribution<%1%>&, %1%)"; RealType result = 0; + if(0 == detail::check_scale(function, dist.scale(), &result, Policy())) + return result; + if(0 == detail::check_location(function, dist.location(), &result, Policy())) + return result; if(0 == detail::check_probability(function, p, &result, Policy())) return result; @@ -164,6 +175,10 @@ inline RealType cdf(const complemented2_type& dist) RealType result = 0; if(0 == detail::check_scale("boost::math::mean(const lognormal_distribution<%1%>&)", sigma, &result, Policy())) return result; + if(0 == detail::check_location("boost::math::mean(const lognormal_distribution<%1%>&)", mu, &result, Policy())) + return result; return exp(mu + sigma * sigma / 2); } @@ -220,6 +241,8 @@ inline RealType variance(const lognormal_distribution& dist) RealType result = 0; if(0 == detail::check_scale("boost::math::variance(const lognormal_distribution<%1%>&)", sigma, &result, Policy())) return result; + if(0 == detail::check_location("boost::math::variance(const lognormal_distribution<%1%>&)", mu, &result, Policy())) + return result; return boost::math::expm1(sigma * sigma, Policy()) * exp(2 * mu + sigma * sigma); } @@ -235,6 +258,8 @@ inline RealType mode(const lognormal_distribution& dist) RealType result = 0; if(0 == detail::check_scale("boost::math::mode(const lognormal_distribution<%1%>&)", sigma, &result, Policy())) return result; + if(0 == detail::check_location("boost::math::mode(const lognormal_distribution<%1%>&)", mu, &result, Policy())) + return result; return exp(mu - sigma * sigma); } @@ -261,6 +286,8 @@ inline RealType skewness(const lognormal_distribution& dist) RealType result = 0; if(0 == detail::check_scale("boost::math::skewness(const lognormal_distribution<%1%>&)", sigma, &result, Policy())) return result; + if(0 == detail::check_location("boost::math::skewness(const lognormal_distribution<%1%>&)", dist.location(), &result, Policy())) + return result; return (ess + 2) * sqrt(boost::math::expm1(ss, Policy())); } @@ -277,6 +304,8 @@ inline RealType kurtosis(const lognormal_distribution& dist) RealType result = 0; if(0 == detail::check_scale("boost::math::kurtosis(const lognormal_distribution<%1%>&)", sigma, &result, Policy())) return result; + if(0 == detail::check_location("boost::math::kurtosis(const lognormal_distribution<%1%>&)", dist.location(), &result, Policy())) + return result; return exp(4 * ss) + 2 * exp(3 * ss) + 3 * exp(2 * ss) - 3; } @@ -293,6 +322,8 @@ inline RealType kurtosis_excess(const lognormal_distribution& RealType result = 0; if(0 == detail::check_scale("boost::math::kurtosis_excess(const lognormal_distribution<%1%>&)", sigma, &result, Policy())) return result; + if(0 == detail::check_location("boost::math::kurtosis_excess(const lognormal_distribution<%1%>&)", dist.location(), &result, Policy())) + return result; return exp(4 * ss) + 2 * exp(3 * ss) + 3 * exp(2 * ss) - 6; } diff --git a/3party/boost/boost/math/distributions/non_central_beta.hpp b/3party/boost/boost/math/distributions/non_central_beta.hpp index ebb6e91fa1..6e699e509f 100644 --- a/3party/boost/boost/math/distributions/non_central_beta.hpp +++ b/3party/boost/boost/math/distributions/non_central_beta.hpp @@ -51,17 +51,8 @@ namespace boost int k = itrunc(l2); if(k == 0) k = 1; - T pois; - if(k == 0) - { // Starting Poisson weight: - pois = exp(-l2); - } - else - { - // Starting Poisson weight: - pois = gamma_p_derivative(T(k+1), l2, pol); - } + T pois = gamma_p_derivative(T(k+1), l2, pol); if(pois == 0) return init_val; // recurance term: diff --git a/3party/boost/boost/math/distributions/non_central_t.hpp b/3party/boost/boost/math/distributions/non_central_t.hpp index e46980fc2d..558e551270 100644 --- a/3party/boost/boost/math/distributions/non_central_t.hpp +++ b/3party/boost/boost/math/distributions/non_central_t.hpp @@ -27,7 +27,7 @@ namespace boost namespace detail{ template - T non_central_t2_p(T n, T delta, T x, T y, const Policy& pol, T init_val) + T non_central_t2_p(T v, T delta, T x, T y, const Policy& pol, T init_val) { BOOST_MATH_STD_USING // @@ -38,43 +38,26 @@ namespace boost T d2 = delta * delta / 2; // // k is the starting point for iteration, and is the - // maximum of the poisson weighting term: + // maximum of the poisson weighting term, we don't + // ever allow k == 0 as this can lead to catastrophic + // cancellation errors later (test case is v = 1621286869049072.3 + // delta = 0.16212868690490723, x = 0.86987415482475994). // int k = itrunc(d2); T pois; - if(k < 15) - { - // Since we'll likely need 30-40 terms anyway, start from zero - // since this simplifies the arithmetic, don't go too overboard though - // as this is the *unstable* direction: - k = 0; - // Starting Poisson weight: - pois = exp(-d2) * 2 / constants::root_pi(); - pois *= delta / constants::root_two(); - } - else - { - // Starting Poisson weight: - pois = gamma_p_derivative(T(k+1), d2, pol) - * tgamma_delta_ratio(T(k + 1), T(0.5f)) - * delta / constants::root_two(); - } + if(k == 0) k = 1; + // Starting Poisson weight: + pois = gamma_p_derivative(T(k+1), d2, pol) + * tgamma_delta_ratio(T(k + 1), T(0.5f)) + * delta / constants::root_two(); if(pois == 0) return init_val; T xterm, beta; // Recurrance & starting beta terms: - if(k == 0) - { - beta = -boost::math::powm1(y, n / 2, pol); - xterm = beta > 0.5f ? T(pow(y, n / 2)) : T(1 - beta); - } - else - { - beta = x < y - ? detail::ibeta_imp(T(k + 1), T(n / 2), x, pol, false, true, &xterm) - : detail::ibeta_imp(T(n / 2), T(k + 1), y, pol, true, true, &xterm); - xterm *= y / (n / 2 + k); - } + beta = x < y + ? detail::ibeta_imp(T(k + 1), T(v / 2), x, pol, false, true, &xterm) + : detail::ibeta_imp(T(v / 2), T(k + 1), y, pol, true, true, &xterm); + xterm *= y / (v / 2 + k); T poisf(pois), betaf(beta), xtermf(xterm); T sum = init_val; if((xterm == 0) && (beta == 0)) @@ -85,26 +68,31 @@ namespace boost // direction for recursion: // boost::uintmax_t count = 0; + T last_term = 0; for(int i = k; i >= 0; --i) { T term = beta * pois; sum += term; - if(fabs(term/sum) < errtol) + // Don't terminate on first term in case we "fixed" k above: + if((fabs(last_term) > fabs(term)) && fabs(term/sum) < errtol) break; + last_term = term; pois *= (i + 0.5f) / d2; beta += xterm; - xterm *= (i) / (x * (n / 2 + i - 1)); + xterm *= (i) / (x * (v / 2 + i - 1)); ++count; } + last_term = 0; for(int i = k + 1; ; ++i) { poisf *= d2 / (i + 0.5f); - xtermf *= (x * (n / 2 + i - 1)) / (i); + xtermf *= (x * (v / 2 + i - 1)) / (i); betaf -= xtermf; T term = poisf * betaf; sum += term; - if(fabs(term/sum) < errtol) + if((fabs(last_term) > fabs(term)) && (fabs(term/sum) < errtol)) break; + last_term = term; ++count; if(count > max_iter) { @@ -117,7 +105,7 @@ namespace boost } template - T non_central_t2_q(T n, T delta, T x, T y, const Policy& pol, T init_val) + T non_central_t2_q(T v, T delta, T x, T y, const Policy& pol, T init_val) { BOOST_MATH_STD_USING // @@ -128,23 +116,16 @@ namespace boost T d2 = delta * delta / 2; // // k is the starting point for iteration, and is the - // maximum of the poisson weighting term: + // maximum of the poisson weighting term, we don't allow + // k == 0 as this can cause catastrophic cancellation errors + // (test case is v = 561908036470413.25, delta = 0.056190803647041321, + // x = 1.6155232703966216): // int k = itrunc(d2); - if(k < 30) - { - // We typically need around 40 terms so may as well start at 0 - // and gain faster computation of starting conditions: - k = 0; - } + if(k == 0) k = 1; // Starting Poisson weight: T pois; - if(k == 0) - { - pois = exp(-d2) * 2 / constants::root_pi(); - pois *= delta / constants::root_two(); - } - else if((k < (int)(max_factorial::value)) && (d2 < tools::log_max_value()) && (log(d2) * k < tools::log_max_value())) + if((k < (int)(max_factorial::value)) && (d2 < tools::log_max_value()) && (log(d2) * k < tools::log_max_value())) { // // For small k we can optimise this calculation by using @@ -170,14 +151,14 @@ namespace boost if(k != 0) { beta = x < y - ? detail::ibeta_imp(T(k + 1), T(n / 2), x, pol, true, true, &xterm) - : detail::ibeta_imp(T(n / 2), T(k + 1), y, pol, false, true, &xterm); + ? detail::ibeta_imp(T(k + 1), T(v / 2), x, pol, true, true, &xterm) + : detail::ibeta_imp(T(v / 2), T(k + 1), y, pol, false, true, &xterm); - xterm *= y / (n / 2 + k); + xterm *= y / (v / 2 + k); } else { - beta = pow(y, n / 2); + beta = pow(y, v / 2); xterm = beta; } T poisf(pois), betaf(beta), xtermf(xterm); @@ -189,10 +170,11 @@ namespace boost // Fused forward and backwards recursion: // boost::uintmax_t count = 0; + T last_term = 0; for(int i = k + 1, j = k; ; ++i, --j) { poisf *= d2 / (i + 0.5f); - xtermf *= (x * (n / 2 + i - 1)) / (i); + xtermf *= (x * (v / 2 + i - 1)) / (i); betaf += xtermf; T term = poisf * betaf; @@ -201,12 +183,14 @@ namespace boost term += beta * pois; pois *= (j + 0.5f) / d2; beta -= xterm; - xterm *= (j) / (x * (n / 2 + j - 1)); + xterm *= (j) / (x * (v / 2 + j - 1)); } sum += term; - if(fabs(term/sum) < errtol) + // Don't terminate on first term in case we "fixed" the value of k above: + if((fabs(last_term) > fabs(term)) && fabs(term/sum) < errtol) break; + last_term = term; if(count > max_iter) { return policies::raise_evaluation_error( @@ -219,27 +203,47 @@ namespace boost } template - T non_central_t_cdf(T n, T delta, T t, bool invert, const Policy& pol) + T non_central_t_cdf(T v, T delta, T t, bool invert, const Policy& pol) { + BOOST_MATH_STD_USING + if (boost::math::isinf(v)) + { // Infinite degrees of freedom, so use normal distribution located at delta. + normal_distribution n(delta, 1); + return cdf(n, t); + } // - // For t < 0 we have to use reflect: - // + // Otherwise, for t < 0 we have to use the reflection formula: if(t < 0) { t = -t; delta = -delta; invert = !invert; } + if(fabs(delta / (4 * v)) < policies::get_epsilon()) + { + // Approximate with a Student's T centred on delta, + // the crossover point is based on eq 2.6 from + // "A Comparison of Approximations To Percentiles of the + // Noncentral t-Distribution". H. Sahai and M. M. Ojeda, + // Revista Investigacion Operacional Vol 21, No 2, 2000. + // Original sources referenced in the above are: + // "Some Approximations to the Percentage Points of the Noncentral + // t-Distribution". C. van Eeden. International Statistical Review, 29, 4-31. + // "Continuous Univariate Distributions". N.L. Johnson, S. Kotz and + // N. Balkrishnan. 1995. John Wiley and Sons New York. + T result = cdf(students_t_distribution(v), t - delta); + return invert ? 1 - result : result; + } // // x and y are the corresponding random // variables for the noncentral beta distribution, // with y = 1 - x: // - T x = t * t / (n + t * t); - T y = n / (n + t * t); + T x = t * t / (v + t * t); + T y = v / (v + t * t); T d2 = delta * delta; T a = 0.5f; - T b = n / 2; + T b = v / 2; T c = a + b + d2 / 2; // // Crossover point for calculating p or q is the same @@ -255,7 +259,7 @@ namespace boost if(x != 0) { result = non_central_beta_p(a, b, d2, x, y, pol); - result = non_central_t2_p(n, delta, x, y, pol, result); + result = non_central_t2_p(v, delta, x, y, pol, result); result /= 2; } else @@ -271,10 +275,10 @@ namespace boost if(x != 0) { result = non_central_beta_q(a, b, d2, x, y, pol); - result = non_central_t2_q(n, delta, x, y, pol, result); + result = non_central_t2_q(v, delta, x, y, pol, result); result /= 2; } - else + else // x == 0 result = cdf(complement(boost::math::normal_distribution(), -delta)); } if(invert) @@ -283,10 +287,11 @@ namespace boost } template - T non_central_t_quantile(T v, T delta, T p, T q, const Policy&) + T non_central_t_quantile(const char* function, T v, T delta, T p, T q, const Policy&) { BOOST_MATH_STD_USING - static const char* function = "quantile(non_central_t_distribution<%1%>, %1%)"; + // static const char* function = "quantile(non_central_t_distribution<%1%>, %1%)"; + // now passed as function typedef typename policies::evaluation::type value_type; typedef typename policies::normalise< Policy, @@ -296,7 +301,7 @@ namespace boost policies::assert_undefined<> >::type forwarding_policy; T r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -313,11 +318,24 @@ namespace boost Policy())) return r; + value_type guess = 0; - if(v > 3) - { - value_type mean = delta * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, T(0.5f)); - value_type var = ((delta * delta + 1) * v) / (v - 2) - mean * mean; + if ( (boost::math::isinf(v)) || (v > 1 / boost::math::tools::epsilon()) ) + { // Infinite or very large degrees of freedom, so use normal distribution located at delta. + normal_distribution n(delta, 1); + if (p < q) + { + return quantile(n, p); + } + else + { + return quantile(complement(n, q)); + } + } + else if(v > 3) + { // Use normal distribution to calculate guess. + value_type mean = (v > 1 / policies::get_epsilon()) ? delta : delta * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, T(0.5f)); + value_type var = (v > 1 / policies::get_epsilon()) ? 1 : (((delta * delta + 1) * v) / (v - 2) - mean * mean); if(p < q) guess = quantile(normal_distribution(mean, var), p); else @@ -370,31 +388,16 @@ namespace boost // int k = itrunc(d2); T pois, xterm; - if(k < 30) - { - // - // Since we'll need at least 30-40 terms anyway, start from 0 - // since this simplifies the starting arithmetic: - // - k = 0; - // Starting Poisson weight: - pois = exp(-d2) - * (2 / constants::root_pi()) - * delta / constants::root_two(); - // Starting beta term: - xterm = pow(y, n / 2 - 1) * n / 2; - } - else - { - // Starting Poisson weight: - pois = gamma_p_derivative(T(k+1), d2, pol) - * tgamma_delta_ratio(T(k + 1), T(0.5f)) - * delta / constants::root_two(); - // Starting beta term: - xterm = x < y - ? ibeta_derivative(T(k + 1), n / 2, x, pol) - : ibeta_derivative(n / 2, T(k + 1), y, pol); - } + if(k == 0) + k = 1; + // Starting Poisson weight: + pois = gamma_p_derivative(T(k+1), d2, pol) + * tgamma_delta_ratio(T(k + 1), T(0.5f)) + * delta / constants::root_two(); + // Starting beta term: + xterm = x < y + ? ibeta_derivative(T(k + 1), n / 2, x, pol) + : ibeta_derivative(n / 2, T(k + 1), y, pol); T poisf(pois), xtermf(xterm); T sum = init_val; if((pois == 0) || (xterm == 0)) @@ -409,7 +412,7 @@ namespace boost { T term = xterm * pois; sum += term; - if((fabs(term/sum) < errtol) || (term == 0)) + if(((fabs(term/sum) < errtol) && (i != k)) || (term == 0)) break; pois *= (i + 0.5f) / d2; xterm *= (i) / (x * (n / 2 + i)); @@ -444,9 +447,13 @@ namespace boost T non_central_t_pdf(T n, T delta, T t, const Policy& pol) { BOOST_MATH_STD_USING + if (boost::math::isinf(n)) + { // Infinite degrees of freedom, so use normal distribution located at delta. + normal_distribution n(delta, 1); + return pdf(n, t); + } // - // For t < 0 we have to use the reflection formula: - // + // Otherwise, for t < 0 we have to use the reflection formula: if(t < 0) { t = -t; @@ -468,6 +475,20 @@ namespace boost * sqrt(n / constants::pi()) * exp(-delta * delta / 2) / 2; } + if(fabs(delta / (4 * n)) < policies::get_epsilon()) + { + // Approximate with a Student's T centred on delta, + // the crossover point is based on eq 2.6 from + // "A Comparison of Approximations To Percentiles of the + // Noncentral t-Distribution". H. Sahai and M. M. Ojeda, + // Revista Investigacion Operacional Vol 21, No 2, 2000. + // Original sources referenced in the above are: + // "Some Approximations to the Percentage Points of the Noncentral + // t-Distribution". C. van Eeden. International Statistical Review, 29, 4-31. + // "Continuous Univariate Distributions". N.L. Johnson, S. Kotz and + // N. Balkrishnan. 1995. John Wiley and Sons New York. + return pdf(students_t_distribution(n), t - delta); + } // // x and y are the corresponding random // variables for the noncentral beta distribution, @@ -494,13 +515,35 @@ namespace boost template T mean(T v, T delta, const Policy& pol) { + if (boost::math::isinf(v)) + { + return delta; + } BOOST_MATH_STD_USING - return delta * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, T(0.5f), pol); + if (v > 1 / boost::math::tools::epsilon() ) + { + //normal_distribution n(delta, 1); + //return boost::math::mean(n); + return delta; + } + else + { + return delta * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, T(0.5f), pol); + } + // Other moments use mean so using normal distribution is propagated. } template T variance(T v, T delta, const Policy& pol) { + if (boost::math::isinf(v)) + { + return 1; + } + if (delta == 0) + { // == Student's t + return v / (v - 2); + } T result = ((delta * delta + 1) * v) / (v - 2); T m = mean(v, delta, pol); result -= m * m; @@ -511,6 +554,14 @@ namespace boost T skewness(T v, T delta, const Policy& pol) { BOOST_MATH_STD_USING + if (boost::math::isinf(v)) + { + return 0; + } + if(delta == 0) + { // == Student's t + return 0; + } T mean = boost::math::detail::mean(v, delta, pol); T l2 = delta * delta; T var = ((l2 + 1) * v) / (v - 2) - mean * mean; @@ -525,6 +576,14 @@ namespace boost T kurtosis_excess(T v, T delta, const Policy& pol) { BOOST_MATH_STD_USING + if (boost::math::isinf(v)) + { + return 3; + } + if (delta == 0) + { // == Student's t + return 3; + } T mean = boost::math::detail::mean(v, delta, pol); T l2 = delta * delta; T var = ((l2 + 1) * v) / (v - 2) - mean * mean; @@ -626,7 +685,7 @@ namespace boost // Can't do a thing if one of p and q is zero: // return policies::raise_evaluation_error(function, - "Can't find non centrality parameter when the probability is 0 or 1, only possible answer is %1%", + "Can't find non-centrality parameter when the probability is 0 or 1, only possible answer is %1%", RealType(std::numeric_limits::quiet_NaN()), Policy()); } t_non_centrality_finder f(v, x, p < q ? p : q, p < q ? false : true); @@ -652,7 +711,7 @@ namespace boost return result; } #endif - } // namespace detail + } // namespace detail ====================================================================== template > class non_central_t_distribution @@ -665,7 +724,7 @@ namespace boost { const char* function = "boost::math::non_central_t_distribution<%1%>::non_central_t_distribution(%1%,%1%)"; RealType r; - detail::check_df( + detail::check_df_gt0_to_inf( function, v, &r, Policy()); detail::check_finite( @@ -803,7 +862,7 @@ namespace boost RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -841,7 +900,7 @@ namespace boost RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -854,7 +913,7 @@ namespace boost if(v <= 1) return policies::raise_domain_error( function, - "The non central t distribution has no defined mean for degrees of freedom <= 1: got v=%1%.", v, Policy()); + "The non-central t distribution has no defined mean for degrees of freedom <= 1: got v=%1%.", v, Policy()); // return l * sqrt(v / 2) * tgamma_delta_ratio((v - 1) * 0.5f, RealType(0.5f)); return policies::checked_narrowing_cast( detail::mean(static_cast(v), static_cast(l), forwarding_policy()), function); @@ -876,7 +935,7 @@ namespace boost RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -889,7 +948,7 @@ namespace boost if(v <= 2) return policies::raise_domain_error( function, - "The non central t distribution has no defined variance for degrees of freedom <= 2: got v=%1%.", v, Policy()); + "The non-central t distribution has no defined variance for degrees of freedom <= 2: got v=%1%.", v, Policy()); return policies::checked_narrowing_cast( detail::variance(static_cast(v), static_cast(l), forwarding_policy()), function); } @@ -911,7 +970,7 @@ namespace boost RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -924,7 +983,7 @@ namespace boost if(v <= 3) return policies::raise_domain_error( function, - "The non central t distribution has no defined skewness for degrees of freedom <= 3: got v=%1%.", v, Policy());; + "The non-central t distribution has no defined skewness for degrees of freedom <= 3: got v=%1%.", v, Policy());; return policies::checked_narrowing_cast( detail::skewness(static_cast(v), static_cast(l), forwarding_policy()), function); } @@ -943,7 +1002,7 @@ namespace boost RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -956,7 +1015,7 @@ namespace boost if(v <= 4) return policies::raise_domain_error( function, - "The non central t distribution has no defined kurtosis for degrees of freedom <= 4: got v=%1%.", v, Policy());; + "The non-central t distribution has no defined kurtosis for degrees of freedom <= 4: got v=%1%.", v, Policy());; return policies::checked_narrowing_cast( detail::kurtosis_excess(static_cast(v), static_cast(l), forwarding_policy()), function); } // kurtosis_excess @@ -970,7 +1029,7 @@ namespace boost template inline RealType pdf(const non_central_t_distribution& dist, const RealType& t) { // Probability Density/Mass Function. - const char* function = "cdf(non_central_t_distribution<%1%>, %1%)"; + const char* function = "pdf(non_central_t_distribution<%1%>, %1%)"; typedef typename policies::evaluation::type value_type; typedef typename policies::normalise< Policy, @@ -982,7 +1041,7 @@ namespace boost RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -1009,7 +1068,8 @@ namespace boost template RealType cdf(const non_central_t_distribution& dist, const RealType& x) { - const char* function = "boost::math::non_central_t_distribution<%1%>::cdf(%1%)"; + const char* function = "boost::math::cdf(non_central_t_distribution<%1%>&, %1%)"; +// was const char* function = "boost::math::non_central_t_distribution<%1%>::cdf(%1%)"; typedef typename policies::evaluation::type value_type; typedef typename policies::normalise< Policy, @@ -1021,7 +1081,7 @@ namespace boost RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -1037,10 +1097,17 @@ namespace boost &r, Policy())) return (RealType)r; + if (boost::math::isinf(v)) + { // Infinite degrees of freedom, so use normal distribution located at delta. + normal_distribution n(l, 1); + cdf(n, x); + //return cdf(normal_distribution(l, 1), x); + } if(l == 0) + { // NO non-centrality, so use Student's t instead. return cdf(students_t_distribution(v), x); - + } return policies::checked_narrowing_cast( detail::non_central_t_cdf( static_cast(v), @@ -1053,7 +1120,8 @@ namespace boost template RealType cdf(const complemented2_type, RealType>& c) { // Complemented Cumulative Distribution Function - const char* function = "boost::math::non_central_t_distribution<%1%>::cdf(%1%)"; + // was const char* function = "boost::math::non_central_t_distribution<%1%>::cdf(%1%)"; + const char* function = "boost::math::cdf(const complement(non_central_t_distribution<%1%>&), %1%)"; typedef typename policies::evaluation::type value_type; typedef typename policies::normalise< Policy, @@ -1065,9 +1133,9 @@ namespace boost non_central_t_distribution const& dist = c.dist; RealType x = c.param; RealType v = dist.degrees_of_freedom(); - RealType l = dist.non_centrality(); + RealType l = dist.non_centrality(); // aka delta RealType r; - if(!detail::check_df( + if(!detail::check_df_gt0_to_inf( function, v, &r, Policy()) || @@ -1084,9 +1152,15 @@ namespace boost Policy())) return (RealType)r; + if (boost::math::isinf(v)) + { // Infinite degrees of freedom, so use normal distribution located at delta. + normal_distribution n(l, 1); + return cdf(complement(n, x)); + } if(l == 0) + { // zero non-centrality so use Student's t distribution. return cdf(complement(students_t_distribution(v), x)); - + } return policies::checked_narrowing_cast( detail::non_central_t_cdf( static_cast(v), @@ -1099,19 +1173,21 @@ namespace boost template inline RealType quantile(const non_central_t_distribution& dist, const RealType& p) { // Quantile (or Percent Point) function. + static const char* function = "quantile(const non_central_t_distribution<%1%>, %1%)"; RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); - return detail::non_central_t_quantile(v, l, p, RealType(1-p), Policy()); + return detail::non_central_t_quantile(function, v, l, p, RealType(1-p), Policy()); } // quantile template inline RealType quantile(const complemented2_type, RealType>& c) { // Quantile (or Percent Point) function. + static const char* function = "quantile(const complement(non_central_t_distribution<%1%>, %1%))"; non_central_t_distribution const& dist = c.dist; RealType q = c.param; RealType v = dist.degrees_of_freedom(); RealType l = dist.non_centrality(); - return detail::non_central_t_quantile(v, l, RealType(1-q), q, Policy()); + return detail::non_central_t_quantile(function, v, l, RealType(1-q), q, Policy()); } // quantile complement. } // namespace math diff --git a/3party/boost/boost/math/distributions/normal.hpp b/3party/boost/boost/math/distributions/normal.hpp index baeecf6348..6cca20a57f 100644 --- a/3party/boost/boost/math/distributions/normal.hpp +++ b/3party/boost/boost/math/distributions/normal.hpp @@ -74,17 +74,30 @@ typedef normal_distribution normal; template inline const std::pair range(const normal_distribution& /*dist*/) { // Range of permissible values for random variable x. - using boost::math::tools::max_value; - return std::pair(-max_value(), max_value()); // - to + max value. + if (std::numeric_limits::has_infinity) + { + return std::pair(-std::numeric_limits::infinity(), std::numeric_limits::infinity()); // - to + infinity. + } + else + { // Can only use max_value. + using boost::math::tools::max_value; + return std::pair(-max_value(), max_value()); // - to + max value. + } } template inline const std::pair support(const normal_distribution& /*dist*/) { // Range of supported values for random variable x. // This is range where cdf rises from 0 to 1, and outside it, the pdf is zero. - + if (std::numeric_limits::has_infinity) + { + return std::pair(-std::numeric_limits::infinity(), std::numeric_limits::infinity()); // - to + infinity. + } + else + { // Can only use max_value. using boost::math::tools::max_value; return std::pair(-max_value(), max_value()); // - to + max value. + } } template diff --git a/3party/boost/boost/math/distributions/rayleigh.hpp b/3party/boost/boost/math/distributions/rayleigh.hpp index 1ffb9dc0ad..8421434411 100644 --- a/3party/boost/boost/math/distributions/rayleigh.hpp +++ b/3party/boost/boost/math/distributions/rayleigh.hpp @@ -28,11 +28,11 @@ namespace detail template inline bool verify_sigma(const char* function, RealType sigma, RealType* presult, const Policy& pol) { - if(sigma <= 0) + if((sigma <= 0) || (!(boost::math::isfinite)(sigma))) { *presult = policies::raise_domain_error( function, - "The scale parameter \"sigma\" must be > 0, but was: %1%.", sigma, pol); + "The scale parameter \"sigma\" must be > 0 and finite, but was: %1%.", sigma, pol); return false; } return true; @@ -41,7 +41,7 @@ namespace detail template inline bool verify_rayleigh_x(const char* function, RealType x, RealType* presult, const Policy& pol) { - if(x < 0) + if((x < 0) || (boost::math::isnan)(x)) { *presult = policies::raise_domain_error( function, @@ -81,7 +81,7 @@ template inline const std::pair range(const rayleigh_distribution& /*dist*/) { // Range of permissible values for random variable x. using boost::math::tools::max_value; - return std::pair(static_cast(0), max_value()); + return std::pair(static_cast(0), std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : max_value()); } template @@ -108,6 +108,10 @@ inline RealType pdf(const rayleigh_distribution& dist, const R { return result; } + if((boost::math::isinf)(x)) + { + return 0; + } RealType sigmasqr = sigma * sigma; result = x * (exp(-(x * x) / ( 2 * sigmasqr))) / sigmasqr; return result; diff --git a/3party/boost/boost/math/distributions/skew_normal.hpp b/3party/boost/boost/math/distributions/skew_normal.hpp index 58526defdb..8ef9b5669a 100644 --- a/3party/boost/boost/math/distributions/skew_normal.hpp +++ b/3party/boost/boost/math/distributions/skew_normal.hpp @@ -1,4 +1,4 @@ -// (C) Benjamin Sobotta 2012 +// Copyright Benjamin Sobotta 2012 // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file @@ -100,7 +100,9 @@ namespace boost{ namespace math{ inline const std::pair range(const skew_normal_distribution& /*dist*/) { // Range of permissible values for random variable x. using boost::math::tools::max_value; - return std::pair(-max_value(), max_value()); // - to + max value. + return std::pair( + std::numeric_limits::has_infinity ? -std::numeric_limits::infinity() : -max_value(), + std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : max_value()); // - to + max value. } template @@ -476,50 +478,51 @@ namespace boost{ namespace math{ // 21 elements static const RealType shapes[] = { 0.0, - 1.000000000000000e-004, - 2.069138081114790e-004, - 4.281332398719396e-004, - 8.858667904100824e-004, - 1.832980710832436e-003, - 3.792690190732250e-003, - 7.847599703514606e-003, - 1.623776739188722e-002, - 3.359818286283781e-002, - 6.951927961775606e-002, - 1.438449888287663e-001, - 2.976351441631319e-001, - 6.158482110660261e-001, - 1.274274985703135e+000, - 2.636650898730361e+000, - 5.455594781168514e+000, - 1.128837891684688e+001, - 2.335721469090121e+001, - 4.832930238571753e+001, - 1.000000000000000e+002}; + static_cast(1.000000000000000e-004), + static_cast(2.069138081114790e-004), + static_cast(4.281332398719396e-004), + static_cast(8.858667904100824e-004), + static_cast(1.832980710832436e-003), + static_cast(3.792690190732250e-003), + static_cast(7.847599703514606e-003), + static_cast(1.623776739188722e-002), + static_cast(3.359818286283781e-002), + static_cast(6.951927961775606e-002), + static_cast(1.438449888287663e-001), + static_cast(2.976351441631319e-001), + static_cast(6.158482110660261e-001), + static_cast(1.274274985703135e+000), + static_cast(2.636650898730361e+000), + static_cast(5.455594781168514e+000), + static_cast(1.128837891684688e+001), + static_cast(2.335721469090121e+001), + static_cast(4.832930238571753e+001), + static_cast(1.000000000000000e+002) + }; // 21 elements static const RealType guess[] = { 0.0, - 5.000050000525391e-005, - 1.500015000148736e-004, - 3.500035000350010e-004, - 7.500075000752560e-004, - 1.450014500145258e-003, - 3.050030500305390e-003, - 6.250062500624765e-003, - 1.295012950129504e-002, - 2.675026750267495e-002, - 5.525055250552491e-002, - 1.132511325113255e-001, - 2.249522495224952e-001, - 3.992539925399257e-001, - 5.353553535535358e-001, - 4.954549545495457e-001, - 3.524535245352451e-001, - 2.182521825218249e-001, - 1.256512565125654e-001, - 6.945069450694508e-002, - 3.735037350373460e-002 + static_cast(5.000050000525391e-005), + static_cast(1.500015000148736e-004), + static_cast(3.500035000350010e-004), + static_cast(7.500075000752560e-004), + static_cast(1.450014500145258e-003), + static_cast(3.050030500305390e-003), + static_cast(6.250062500624765e-003), + static_cast(1.295012950129504e-002), + static_cast(2.675026750267495e-002), + static_cast(5.525055250552491e-002), + static_cast(1.132511325113255e-001), + static_cast(2.249522495224952e-001), + static_cast(3.992539925399257e-001), + static_cast(5.353553535535358e-001), + static_cast(4.954549545495457e-001), + static_cast(3.524535245352451e-001), + static_cast(2.182521825218249e-001), + static_cast(1.256512565125654e-001), + static_cast(6.945069450694508e-002), + static_cast(3.735037350373460e-002) }; const RealType* result_ptr = std::lower_bound(shapes, shapes+21, shape); @@ -532,7 +535,7 @@ namespace boost{ namespace math{ // TODO: make the search bounds smarter, depending on the shape parameter RealType search_min = 0; // below zero was caught above - RealType search_max = 0.55; // will never go above 0.55 + RealType search_max = 0.55f; // will never go above 0.55 // refine if(d < static_cast(21)) // shape smaller 100 @@ -544,7 +547,7 @@ namespace boost{ namespace math{ } else // shape greater 100 { - result = 1e-4; + result = 1e-4f; search_max = guess[19]; // set 19 instead of 20 to have a safety margin because the table may not be exact @ shape=100 } @@ -642,23 +645,23 @@ namespace boost{ namespace math{ if(false == detail::check_probability(function, p, &result, Policy())) return result; - // compute initial guess via Cornish-Fisher expansion + // Compute initial guess via Cornish-Fisher expansion. RealType x = -boost::math::erfc_inv(2 * p, Policy()) * constants::root_two(); - // avoid unnecessary computations if there is no skew + // Avoid unnecessary computations if there is no skew. if(shape != 0) { const RealType skew = skewness(dist); const RealType exk = kurtosis_excess(dist); x = x + (x*x-static_cast(1))*skew/static_cast(6) - + x*(x*x-static_cast(3))*exk/static_cast(24) - - x*(static_cast(2)*x*x-static_cast(5))*skew*skew/static_cast(36); + + x*(x*x-static_cast(3))*exk/static_cast(24) + - x*(static_cast(2)*x*x-static_cast(5))*skew*skew/static_cast(36); } // if(shape != 0) result = standard_deviation(dist)*x+mean(dist); - // handle special case of non-skew normal distribution + // handle special case of non-skew normal distribution. if(shape == 0) return result; @@ -678,7 +681,7 @@ namespace boost{ namespace math{ template inline RealType quantile(const complemented2_type, RealType>& c) - { + { const RealType scale = c.dist.scale(); const RealType location = c.dist.location(); const RealType shape = c.dist.shape(); diff --git a/3party/boost/boost/math/distributions/students_t.hpp b/3party/boost/boost/math/distributions/students_t.hpp index 38df1b6287..fef021ecb2 100644 --- a/3party/boost/boost/math/distributions/students_t.hpp +++ b/3party/boost/boost/math/distributions/students_t.hpp @@ -1,5 +1,7 @@ // Copyright John Maddock 2006. -// Copyright Paul A. Bristow 2006. +// Copyright Paul A. Bristow 2006, 2012. +// Copyright Thomas Mang 2012. + // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -14,6 +16,7 @@ #include // for ibeta(a, b, x). #include #include +#include #include @@ -31,16 +34,16 @@ public: typedef RealType value_type; typedef Policy policy_type; - students_t_distribution(RealType i) : m_df(i) + students_t_distribution(RealType df) : df_(df) { // Constructor. RealType result; - detail::check_df( - "boost::math::students_t_distribution<%1%>::students_t_distribution", m_df, &result, Policy()); + detail::check_df_gt0_to_inf( // Checks that df > 0 or df == inf. + "boost::math::students_t_distribution<%1%>::students_t_distribution", df_, &result, Policy()); } // students_t_distribution RealType degrees_of_freedom()const { - return m_df; + return df_; } // Parameter estimation: @@ -52,17 +55,16 @@ public: RealType hint = 100); private: - // - // Data members: - // - RealType m_df; // degrees of freedom are a real number. + // Data member: + RealType df_; // degrees of freedom is a real number or +infinity. }; -typedef students_t_distribution students_t; +typedef students_t_distribution students_t; // Convenience typedef for double version. template inline const std::pair range(const students_t_distribution& /*dist*/) { // Range of permissible values for random variable x. + // NOT including infinity. using boost::math::tools::max_value; return std::pair(-max_value(), max_value()); } @@ -76,77 +78,124 @@ inline const std::pair support(const students_t_distribution } template -inline RealType pdf(const students_t_distribution& dist, const RealType& t) +inline RealType pdf(const students_t_distribution& dist, const RealType& x) { BOOST_FPU_EXCEPTION_GUARD - BOOST_MATH_STD_USING // for ADL of std functions + BOOST_MATH_STD_USING // for ADL of std functions. - RealType degrees_of_freedom = dist.degrees_of_freedom(); - // Error check: RealType error_result; - if(false == detail::check_df( - "boost::math::pdf(const students_t_distribution<%1%>&, %1%)", degrees_of_freedom, &error_result, Policy())) + if(false == detail::check_x( + "boost::math::pdf(const students_t_distribution<%1%>&, %1%)", x, &error_result, Policy())) return error_result; - // Might conceivably permit df = +infinity and use normal distribution. + RealType df = dist.degrees_of_freedom(); + if(false == detail::check_df_gt0_to_inf( // Check that df > 0 or == +infinity. + "boost::math::pdf(const students_t_distribution<%1%>&, %1%)", df, &error_result, Policy())) + return error_result; + RealType result; - RealType basem1 = t * t / degrees_of_freedom; - if(basem1 < 0.125) - { - result = exp(-boost::math::log1p(basem1, Policy()) * (1+degrees_of_freedom) / 2); + if (boost::math::isinf(x)) + { // +infinity. + normal_distribution n(0, 1); + RealType result = pdf(n, x); + return result; + } + RealType limit = policies::get_epsilon(); + // Use policies so that if policy requests lower precision, + // then get the normal distribution approximation earlier. + limit = static_cast(1) / limit; // 1/eps + // for 64-bit double 1/eps = 4503599627370496 + if (df > limit) + { // Special case for really big degrees_of_freedom > 1 / eps + // - use normal distribution which is much faster and more accurate. + normal_distribution n(0, 1); + result = pdf(n, x); } else - { - result = pow(1 / (1 + basem1), (degrees_of_freedom + 1) / 2); + { // + RealType basem1 = x * x / df; + if(basem1 < 0.125) + { + result = exp(-boost::math::log1p(basem1, Policy()) * (1+df) / 2); + } + else + { + result = pow(1 / (1 + basem1), (df + 1) / 2); + } + result /= sqrt(df) * boost::math::beta(df / 2, RealType(0.5f), Policy()); } - result /= sqrt(degrees_of_freedom) * boost::math::beta(degrees_of_freedom / 2, RealType(0.5f), Policy()); return result; } // pdf template -inline RealType cdf(const students_t_distribution& dist, const RealType& t) +inline RealType cdf(const students_t_distribution& dist, const RealType& x) { - RealType degrees_of_freedom = dist.degrees_of_freedom(); - // Error check: RealType error_result; - if(false == detail::check_df( - "boost::math::cdf(const students_t_distribution<%1%>&, %1%)", degrees_of_freedom, &error_result, Policy())) + if(false == detail::check_x( + "boost::math::pdf(const students_t_distribution<%1%>&, %1%)", x, &error_result, Policy())) + return error_result; + RealType df = dist.degrees_of_freedom(); + // Error check: + + if(false == detail::check_df_gt0_to_inf( // Check that df > 0 or == +infinity. + "boost::math::cdf(const students_t_distribution<%1%>&, %1%)", df, &error_result, Policy())) return error_result; - if (t == 0) - { - return 0.5; + if (x == 0) + { // Special case with exact result. + return static_cast(0.5); } - // - // Calculate probability of Student's t using the incomplete beta function. - // probability = ibeta(degrees_of_freedom / 2, 1/2, degrees_of_freedom / (degrees_of_freedom + t*t)) - // - // However when t is small compared to the degrees of freedom, that formula - // suffers from rounding error, use the identity formula to work around - // the problem: - // - // I[x](a,b) = 1 - I[1-x](b,a) - // - // and: - // - // x = df / (df + t^2) - // - // so: - // - // 1 - x = t^2 / (df + t^2) - // - RealType t2 = t * t; - RealType probability; - if(degrees_of_freedom > 2 * t2) - { - RealType z = t2 / (degrees_of_freedom + t2); - probability = ibetac(static_cast(0.5), degrees_of_freedom / 2, z, Policy()) / 2; + if (boost::math::isinf(x)) + { // +infinity. + normal_distribution n(0, 1); + RealType result = cdf(n, x); + return result; + } + RealType limit = policies::get_epsilon(); + // Use policies so that if policy requests lower precision, + // then get the normal distribution approximation earlier. + limit = static_cast(1) / limit; // 1/eps + // for 64-bit double 1/eps = 4503599627370496 + if (df > limit) + { // Special case for really big degrees_of_freedom > 1 / eps (perhaps infinite?) + // - use normal distribution which is much faster and more accurate. + normal_distribution n(0, 1); + RealType result = cdf(n, x); + return result; } else - { - RealType z = degrees_of_freedom / (degrees_of_freedom + t2); - probability = ibeta(degrees_of_freedom / 2, static_cast(0.5), z, Policy()) / 2; - } - return (t > 0 ? 1 - probability : probability); + { // normal df case. + // + // Calculate probability of Student's t using the incomplete beta function. + // probability = ibeta(degrees_of_freedom / 2, 1/2, degrees_of_freedom / (degrees_of_freedom + t*t)) + // + // However when t is small compared to the degrees of freedom, that formula + // suffers from rounding error, use the identity formula to work around + // the problem: + // + // I[x](a,b) = 1 - I[1-x](b,a) + // + // and: + // + // x = df / (df + t^2) + // + // so: + // + // 1 - x = t^2 / (df + t^2) + // + RealType x2 = x * x; + RealType probability; + if(df > 2 * x2) + { + RealType z = x2 / (df + x2); + probability = ibetac(static_cast(0.5), df / 2, z, Policy()) / 2; + } + else + { + RealType z = df / (df + x2); + probability = ibeta(df / 2, static_cast(0.5), z, Policy()) / 2; + } + return (x > 0 ? 1 - probability : probability); + } } // cdf template @@ -155,31 +204,27 @@ inline RealType quantile(const students_t_distribution& dist, BOOST_MATH_STD_USING // for ADL of std functions // // Obtain parameters: - // - RealType degrees_of_freedom = dist.degrees_of_freedom(); RealType probability = p; - // + // Check for domain errors: - // + RealType df = dist.degrees_of_freedom(); static const char* function = "boost::math::quantile(const students_t_distribution<%1%>&, %1%)"; RealType error_result; - if(false == detail::check_df( - function, degrees_of_freedom, &error_result, Policy()) - && detail::check_probability(function, probability, &error_result, Policy())) + if(false == (detail::check_df_gt0_to_inf( // Check that df > 0 or == +infinity. + function, df, &error_result, Policy()) + && detail::check_probability(function, probability, &error_result, Policy()))) return error_result; - // Special cases, regardless of degrees_of_freedom. if (probability == 0) return -policies::raise_overflow_error(function, 0, Policy()); if (probability == 1) return policies::raise_overflow_error(function, 0, Policy()); if (probability == static_cast(0.5)) - return 0; - // - // This next block is disabled in favour of a faster method than - // incomplete beta inverse, code retained for future reference: + return 0; // // #if 0 + // This next block is disabled in favour of a faster method than + // incomplete beta inverse, but code retained for future reference: // // Calculate quantile of Student's t using the incomplete beta function inverse: // @@ -205,7 +250,7 @@ inline RealType quantile(const students_t_distribution& dist, // and a couple of epsilon at double precision and in the central // region where most use cases will occur... // - return boost::math::detail::fast_students_t_quantile(degrees_of_freedom, probability, Policy()); + return boost::math::detail::fast_students_t_quantile(df, probability, Policy()); } // quantile template @@ -236,7 +281,9 @@ struct sample_size_func RealType operator()(const RealType& df) { if(df <= tools::min_value()) + { // return 1; + } students_t_distribution t(df); RealType qa = quantile(complement(t, alpha)); RealType qb = quantile(complement(t, beta)); @@ -286,77 +333,146 @@ RealType students_t_distribution::find_degrees_of_freedom( return result; } -template -inline RealType mean(const students_t_distribution& ) -{ - return 0; -} - -template -inline RealType variance(const students_t_distribution& dist) -{ - // Error check: - RealType error_result; - if(false == detail::check_df( - "boost::math::variance(students_t_distribution<%1%> const&, %1%)", dist.degrees_of_freedom(), &error_result, Policy())) - return error_result; - - RealType v = dist.degrees_of_freedom(); - return v / (v - 2); -} - template inline RealType mode(const students_t_distribution& /*dist*/) { - return 0; + // Assume no checks on degrees of freedom are useful (unlike mean). + return 0; // Always zero by definition. } template inline RealType median(const students_t_distribution& /*dist*/) { - return 0; + // Assume no checks on degrees of freedom are useful (unlike mean). + return 0; // Always zero by definition. } +// See section 5.1 on moments at http://en.wikipedia.org/wiki/Student%27s_t-distribution + +template +inline RealType mean(const students_t_distribution& dist) +{ // Revised for https://svn.boost.org/trac/boost/ticket/7177 + RealType df = dist.degrees_of_freedom(); + if(((boost::math::isnan)(df)) || (df <= 1) ) + { // mean is undefined for moment <= 1! + policies::raise_domain_error( + "boost::math::mean(students_t_distribution<%1%> const&, %1%)", + "Mean is undefined for degrees of freedom < 1 but got %1%.", df, Policy()); + return std::numeric_limits::quiet_NaN(); + } + return 0; +} // mean + +template +inline RealType variance(const students_t_distribution& dist) +{ // http://en.wikipedia.org/wiki/Student%27s_t-distribution + // Revised for https://svn.boost.org/trac/boost/ticket/7177 + RealType df = dist.degrees_of_freedom(); + if ((boost::math::isnan)(df) || (df <= 2)) + { // NaN or undefined for <= 2. + policies::raise_domain_error( + "boost::math::variance(students_t_distribution<%1%> const&, %1%)", + "variance is undefined for degrees of freedom <= 2, but got %1%.", + df, Policy()); + return std::numeric_limits::quiet_NaN(); // Undefined. + } + if (boost::math::isinf(df)) + { // +infinity. + return 1; + } + RealType limit = policies::get_epsilon(); + // Use policies so that if policy requests lower precision, + // then get the normal distribution approximation earlier. + limit = static_cast(1) / limit; // 1/eps + // for 64-bit double 1/eps = 4503599627370496 + if (df > limit) + { // Special case for really big degrees_of_freedom > 1 / eps. + return 1; + } + else + { + return df / (df - 2); + } +} // variance + template inline RealType skewness(const students_t_distribution& dist) { - if(dist.degrees_of_freedom() <= 3) - { + RealType df = dist.degrees_of_freedom(); + if( ((boost::math::isnan)(df)) || (dist.degrees_of_freedom() <= 3)) + { // Undefined for moment k = 3. policies::raise_domain_error( "boost::math::skewness(students_t_distribution<%1%> const&, %1%)", "Skewness is undefined for degrees of freedom <= 3, but got %1%.", dist.degrees_of_freedom(), Policy()); + return std::numeric_limits::quiet_NaN(); } - return 0; -} + return 0; // For all valid df, including infinity. +} // skewness template inline RealType kurtosis(const students_t_distribution& dist) { RealType df = dist.degrees_of_freedom(); - if(df <= 3) - { + if(((boost::math::isnan)(df)) || (df <= 4)) + { // Undefined or infinity for moment k = 4. policies::raise_domain_error( - "boost::math::kurtosis(students_t_distribution<%1%> const&, %1%)", - "Skewness is undefined for degrees of freedom <= 3, but got %1%.", - df, Policy()); + "boost::math::kurtosis(students_t_distribution<%1%> const&, %1%)", + "Kurtosis is undefined for degrees of freedom <= 4, but got %1%.", + df, Policy()); + return std::numeric_limits::quiet_NaN(); // Undefined. } - return 3 * (df - 2) / (df - 4); -} + if (boost::math::isinf(df)) + { // +infinity. + return 3; + } + RealType limit = policies::get_epsilon(); + // Use policies so that if policy requests lower precision, + // then get the normal distribution approximation earlier. + limit = static_cast(1) / limit; // 1/eps + // for 64-bit double 1/eps = 4503599627370496 + if (df > limit) + { // Special case for really big degrees_of_freedom > 1 / eps. + return 3; + } + else + { + //return 3 * (df - 2) / (df - 4); re-arranged to + return 6 / (df - 4) + 3; + } +} // kurtosis template inline RealType kurtosis_excess(const students_t_distribution& dist) { // see http://mathworld.wolfram.com/Kurtosis.html + RealType df = dist.degrees_of_freedom(); - if(df <= 3) - { - policies::raise_domain_error( - "boost::math::kurtosis_excess(students_t_distribution<%1%> const&, %1%)", - "Skewness is undefined for degrees of freedom <= 3, but got %1%.", - df, Policy()); + if(((boost::math::isnan)(df)) || (df <= 4)) + { // Undefined or infinity for moment k = 4. + policies::raise_domain_error( + "boost::math::kurtosis_excess(students_t_distribution<%1%> const&, %1%)", + "Kurtosis_excess is undefined for degrees of freedom <= 4, but got %1%.", + df, Policy()); + return std::numeric_limits::quiet_NaN(); // Undefined. + } + if (boost::math::isinf(df)) + { // +infinity. + return 0; + } + RealType limit = policies::get_epsilon(); + // Use policies so that if policy requests lower precision, + // then get the normal distribution approximation earlier. + limit = static_cast(1) / limit; // 1/eps + // for 64-bit double 1/eps = 4503599627370496 + if (df > limit) + { // Special case for really big degrees_of_freedom > 1 / eps. + return 0; + } + else + { + return 6 / (df - 4); } - return 6 / (df - 4); } } // namespace math diff --git a/3party/boost/boost/math/distributions/weibull.hpp b/3party/boost/boost/math/distributions/weibull.hpp index 6b5c7db34c..133b7e04c3 100644 --- a/3party/boost/boost/math/distributions/weibull.hpp +++ b/3party/boost/boost/math/distributions/weibull.hpp @@ -28,7 +28,7 @@ inline bool check_weibull_shape( RealType shape, RealType* result, const Policy& pol) { - if((shape < 0) || !(boost::math::isfinite)(shape)) + if((shape <= 0) || !(boost::math::isfinite)(shape)) { *result = policies::raise_domain_error( function, @@ -133,11 +133,19 @@ inline RealType pdf(const weibull_distribution& dist, const Re return result; if(x == 0) - { // Special case, but x == min, pdf = 1 for shape = 1, - return 0; + { + if(shape == 1) + { + return 1 / scale; + } + if(shape > 1) + { + return 0; + } + return policies::raise_overflow_error(function, 0, Policy()); } result = exp(-pow(x / scale, shape)); - result *= pow(x / scale, shape) * shape / x; + result *= pow(x / scale, shape - 1) * shape / scale; return result; } diff --git a/3party/boost/boost/math/policies/policy.hpp b/3party/boost/boost/math/policies/policy.hpp index 70e67c70ba..01fe3d0ae0 100644 --- a/3party/boost/boost/math/policies/policy.hpp +++ b/3party/boost/boost/math/policies/policy.hpp @@ -431,7 +431,7 @@ public: // // Mathematically undefined properties: // - typedef typename detail::find_arg, discrete_quantile<> >::type assert_undefined_type; + typedef typename detail::find_arg, assert_undefined<> >::type assert_undefined_type; // // Max iterations: // @@ -537,12 +537,12 @@ private: // // Mathematically undefined properties: // - typedef typename detail::find_arg, discrete_quantile<> >::type assert_undefined_type; + typedef typename detail::find_arg, typename Policy::assert_undefined_type >::type assert_undefined_type; // // Max iterations: // - typedef typename detail::find_arg, max_series_iterations<> >::type max_series_iterations_type; - typedef typename detail::find_arg, max_root_iterations<> >::type max_root_iterations_type; + typedef typename detail::find_arg, typename Policy::max_series_iterations_type>::type max_series_iterations_type; + typedef typename detail::find_arg, typename Policy::max_root_iterations_type>::type max_root_iterations_type; // // Define a typelist of the policies: // diff --git a/3party/boost/boost/math/special_functions.hpp b/3party/boost/boost/math/special_functions.hpp index 00fe866f4a..24f406481c 100644 --- a/3party/boost/boost/math/special_functions.hpp +++ b/3party/boost/boost/math/special_functions.hpp @@ -1,5 +1,5 @@ -// Copyright John Maddock 2006, 2007. -// Copyright Paul A. Bristow 2006, 2007. +// Copyright John Maddock 2006, 2007, 2012. +// Copyright Paul A. Bristow 2006, 2007, 2012 // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file @@ -12,6 +12,7 @@ #ifndef BOOST_MATH_SPECIAL_FUNCTIONS_HPP #define BOOST_MATH_SPECIAL_FUNCTIONS_HPP +#include #include #include #include @@ -36,12 +37,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include #include diff --git a/3party/boost/boost/math/special_functions/airy.hpp b/3party/boost/boost/math/special_functions/airy.hpp new file mode 100644 index 0000000000..86d3c0b5a0 --- /dev/null +++ b/3party/boost/boost/math/special_functions/airy.hpp @@ -0,0 +1,246 @@ +// Copyright John Maddock 2012. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt +// or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_AIRY_HPP +#define BOOST_MATH_AIRY_HPP + +#include +#include + +namespace boost{ namespace math{ + +namespace detail{ + +template +T airy_ai_imp(T x, const Policy& pol) +{ + BOOST_MATH_STD_USING + + if(x < 0) + { + T p = (-x * sqrt(-x) * 2) / 3; + T v = T(1) / 3; + T j1 = boost::math::cyl_bessel_j(v, p, pol); + T j2 = boost::math::cyl_bessel_j(-v, p, pol); + T ai = sqrt(-x) * (j1 + j2) / 3; + //T bi = sqrt(-x / 3) * (j2 - j1); + return ai; + } + else if(fabs(x * x * x) / 6 < tools::epsilon()) + { + T tg = boost::math::tgamma(constants::twothirds(), pol); + T ai = 1 / (pow(T(3), constants::twothirds()) * tg); + //T bi = 1 / (sqrt(boost::math::cbrt(T(3))) * tg); + return ai; + } + else + { + T p = 2 * x * sqrt(x) / 3; + T v = T(1) / 3; + //T j1 = boost::math::cyl_bessel_i(-v, p, pol); + //T j2 = boost::math::cyl_bessel_i(v, p, pol); + // + // Note that although we can calculate ai from j1 and j2, the accuracy is horrible + // as we're subtracting two very large values, so use the Bessel K relation instead: + // + T ai = cyl_bessel_k(v, p, pol) * sqrt(x / 3) / boost::math::constants::pi(); //sqrt(x) * (j1 - j2) / 3; + //T bi = sqrt(x / 3) * (j1 + j2); + return ai; + } +} + +template +T airy_bi_imp(T x, const Policy& pol) +{ + BOOST_MATH_STD_USING + + if(x < 0) + { + T p = (-x * sqrt(-x) * 2) / 3; + T v = T(1) / 3; + T j1 = boost::math::cyl_bessel_j(v, p, pol); + T j2 = boost::math::cyl_bessel_j(-v, p, pol); + //T ai = sqrt(-x) * (j1 + j2) / 3; + T bi = sqrt(-x / 3) * (j2 - j1); + return bi; + } + else if(fabs(x * x * x) / 6 < tools::epsilon()) + { + T tg = boost::math::tgamma(constants::twothirds(), pol); + //T ai = 1 / (pow(T(3), constants::twothirds()) * tg); + T bi = 1 / (sqrt(boost::math::cbrt(T(3))) * tg); + return bi; + } + else + { + T p = 2 * x * sqrt(x) / 3; + T v = T(1) / 3; + T j1 = boost::math::cyl_bessel_i(-v, p, pol); + T j2 = boost::math::cyl_bessel_i(v, p, pol); + T bi = sqrt(x / 3) * (j1 + j2); + return bi; + } +} + +template +T airy_ai_prime_imp(T x, const Policy& pol) +{ + BOOST_MATH_STD_USING + + if(x < 0) + { + T p = (-x * sqrt(-x) * 2) / 3; + T v = T(2) / 3; + T j1 = boost::math::cyl_bessel_j(v, p, pol); + T j2 = boost::math::cyl_bessel_j(-v, p, pol); + T aip = -x * (j1 - j2) / 3; + return aip; + } + else if(fabs(x * x) / 2 < tools::epsilon()) + { + T tg = boost::math::tgamma(constants::third(), pol); + T aip = 1 / (boost::math::cbrt(T(3)) * tg); + return -aip; + } + else + { + T p = 2 * x * sqrt(x) / 3; + T v = T(2) / 3; + //T j1 = boost::math::cyl_bessel_i(-v, p, pol); + //T j2 = boost::math::cyl_bessel_i(v, p, pol); + // + // Note that although we can calculate ai from j1 and j2, the accuracy is horrible + // as we're subtracting two very large values, so use the Bessel K relation instead: + // + T aip = -cyl_bessel_k(v, p, pol) * x / (boost::math::constants::root_three() * boost::math::constants::pi()); + return aip; + } +} + +template +T airy_bi_prime_imp(T x, const Policy& pol) +{ + BOOST_MATH_STD_USING + + if(x < 0) + { + T p = (-x * sqrt(-x) * 2) / 3; + T v = T(2) / 3; + T j1 = boost::math::cyl_bessel_j(v, p, pol); + T j2 = boost::math::cyl_bessel_j(-v, p, pol); + T aip = -x * (j1 + j2) / constants::root_three(); + return aip; + } + else if(fabs(x * x) / 2 < tools::epsilon()) + { + T tg = boost::math::tgamma(constants::third(), pol); + T bip = sqrt(boost::math::cbrt(T(3))) / tg; + return bip; + } + else + { + T p = 2 * x * sqrt(x) / 3; + T v = T(2) / 3; + T j1 = boost::math::cyl_bessel_i(-v, p, pol); + T j2 = boost::math::cyl_bessel_i(v, p, pol); + T aip = x * (j1 + j2) / boost::math::constants::root_three(); + return aip; + } +} + +} // namespace detail + +template +inline typename tools::promote_args::type airy_ai(T x, const Policy&) +{ + BOOST_FPU_EXCEPTION_GUARD + typedef typename tools::promote_args::type result_type; + typedef typename policies::evaluation::type value_type; + typedef typename policies::normalise< + Policy, + policies::promote_float, + policies::promote_double, + policies::discrete_quantile<>, + policies::assert_undefined<> >::type forwarding_policy; + + return policies::checked_narrowing_cast(detail::airy_ai_imp(static_cast(x), forwarding_policy()), "boost::math::airy<%1%>(%1%)"); +} + +template +inline typename tools::promote_args::type airy_ai(T x) +{ + return airy_ai(x, policies::policy<>()); +} + +template +inline typename tools::promote_args::type airy_bi(T x, const Policy&) +{ + BOOST_FPU_EXCEPTION_GUARD + typedef typename tools::promote_args::type result_type; + typedef typename policies::evaluation::type value_type; + typedef typename policies::normalise< + Policy, + policies::promote_float, + policies::promote_double, + policies::discrete_quantile<>, + policies::assert_undefined<> >::type forwarding_policy; + + return policies::checked_narrowing_cast(detail::airy_bi_imp(static_cast(x), forwarding_policy()), "boost::math::airy<%1%>(%1%)"); +} + +template +inline typename tools::promote_args::type airy_bi(T x) +{ + return airy_bi(x, policies::policy<>()); +} + +template +inline typename tools::promote_args::type airy_ai_prime(T x, const Policy&) +{ + BOOST_FPU_EXCEPTION_GUARD + typedef typename tools::promote_args::type result_type; + typedef typename policies::evaluation::type value_type; + typedef typename policies::normalise< + Policy, + policies::promote_float, + policies::promote_double, + policies::discrete_quantile<>, + policies::assert_undefined<> >::type forwarding_policy; + + return policies::checked_narrowing_cast(detail::airy_ai_prime_imp(static_cast(x), forwarding_policy()), "boost::math::airy<%1%>(%1%)"); +} + +template +inline typename tools::promote_args::type airy_ai_prime(T x) +{ + return airy_ai_prime(x, policies::policy<>()); +} + +template +inline typename tools::promote_args::type airy_bi_prime(T x, const Policy&) +{ + BOOST_FPU_EXCEPTION_GUARD + typedef typename tools::promote_args::type result_type; + typedef typename policies::evaluation::type value_type; + typedef typename policies::normalise< + Policy, + policies::promote_float, + policies::promote_double, + policies::discrete_quantile<>, + policies::assert_undefined<> >::type forwarding_policy; + + return policies::checked_narrowing_cast(detail::airy_bi_prime_imp(static_cast(x), forwarding_policy()), "boost::math::airy<%1%>(%1%)"); +} + +template +inline typename tools::promote_args::type airy_bi_prime(T x) +{ + return airy_bi_prime(x, policies::policy<>()); +} + +}} // namespaces + +#endif // BOOST_MATH_AIRY_HPP diff --git a/3party/boost/boost/math/special_functions/beta.hpp b/3party/boost/boost/math/special_functions/beta.hpp index 1177f44d60..40cc9efa4e 100644 --- a/3party/boost/boost/math/special_functions/beta.hpp +++ b/3party/boost/boost/math/special_functions/beta.hpp @@ -597,7 +597,7 @@ struct ibeta_fraction2_t { typedef std::pair result_type; - ibeta_fraction2_t(T a_, T b_, T x_) : a(a_), b(b_), x(x_), m(0) {} + ibeta_fraction2_t(T a_, T b_, T x_, T y_) : a(a_), b(b_), x(x_), y(y_), m(0) {} result_type operator()() { @@ -607,7 +607,7 @@ struct ibeta_fraction2_t T bN = m; bN += (m * (b - m) * x) / (a + 2*m - 1); - bN += ((a + m) * (a - (a + b) * x + 1 + m *(2 - x))) / (a + 2*m + 1); + bN += ((a + m) * (a * y - b * x + 1 + m *(2 - x))) / (a + 2*m + 1); ++m; @@ -615,7 +615,7 @@ struct ibeta_fraction2_t } private: - T a, b, x; + T a, b, x, y; int m; }; // @@ -635,8 +635,10 @@ inline T ibeta_fraction2(T a, T b, T x, T y, const Policy& pol, bool normalised, if(result == 0) return result; - ibeta_fraction2_t f(a, b, x); + ibeta_fraction2_t f(a, b, x, y); T fract = boost::math::tools::continued_fraction_b(f, boost::math::policies::get_epsilon()); + BOOST_MATH_INSTRUMENT_VARIABLE(fract); + BOOST_MATH_INSTRUMENT_VARIABLE(result); return result / fract; } // @@ -1115,7 +1117,7 @@ T ibeta_imp(T a, T b, T x, const Policy& pol, bool inv, bool normalised, T* p_de if(b < 40) { - if((floor(a) == a) && (floor(b) == b)) + if((floor(a) == a) && (floor(b) == b) && (a < (std::numeric_limits::max)() - 100)) { // relate to the binomial distribution and use a finite sum: T k = a - 1; diff --git a/3party/boost/boost/math/special_functions/detail/bessel_jy.hpp b/3party/boost/boost/math/special_functions/detail/bessel_jy.hpp index d60dda2d41..a409e26ad0 100644 --- a/3party/boost/boost/math/special_functions/detail/bessel_jy.hpp +++ b/3party/boost/boost/math/special_functions/detail/bessel_jy.hpp @@ -256,10 +256,8 @@ int CF2_jy(T v, T x, T* p, T* q, const Policy& pol) return 0; } -enum -{ - need_j = 1, need_y = 2 -}; +static const int need_j = 1; +static const int need_y = 2; // Compute J(v, x) and Y(v, x) simultaneously by Steed's method, see // Barnett et al, Computer Physics Communications, vol 8, 377 (1974) diff --git a/3party/boost/boost/math/special_functions/detail/bessel_jy_series.hpp b/3party/boost/boost/math/special_functions/detail/bessel_jy_series.hpp index b926366eb0..a9e6d71cc0 100644 --- a/3party/boost/boost/math/special_functions/detail/bessel_jy_series.hpp +++ b/3party/boost/boost/math/special_functions/detail/bessel_jy_series.hpp @@ -235,7 +235,7 @@ T bessel_yn_small_z(int n, T z, T* scale, const Policy& pol) { return (z * z) / (4 * constants::pi()) * log(z / 2) - (4 / (constants::pi() * z * z)) - - ((z * z) / (8 * constants::pi())) * (3/2 - 2 * constants::euler()); + - ((z * z) / (8 * constants::pi())) * (T(3)/2 - 2 * constants::euler()); } else { diff --git a/3party/boost/boost/math/special_functions/detail/erf_inv.hpp b/3party/boost/boost/math/special_functions/detail/erf_inv.hpp index d51db9d52f..f5d8ee471a 100644 --- a/3party/boost/boost/math/special_functions/detail/erf_inv.hpp +++ b/3party/boost/boost/math/special_functions/detail/erf_inv.hpp @@ -339,10 +339,20 @@ struct erf_inv_initializer boost::math::erfc_inv(static_cast(1e-15), Policy()); if(static_cast(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-130)) != 0) boost::math::erfc_inv(static_cast(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-130)), Policy()); + + // Some compilers choke on constants that would underflow, even in code that isn't instantiated + // so try and filter these cases out in the preprocessor: +#if LDBL_MAX_10_EXP >= 800 if(static_cast(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-800)) != 0) boost::math::erfc_inv(static_cast(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-800)), Policy()); if(static_cast(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-900)) != 0) boost::math::erfc_inv(static_cast(BOOST_MATH_BIG_CONSTANT(T, 64, 1e-900)), Policy()); +#else + if(static_cast(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-800)) != 0) + boost::math::erfc_inv(static_cast(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-800)), Policy()); + if(static_cast(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-900)) != 0) + boost::math::erfc_inv(static_cast(BOOST_MATH_HUGE_CONSTANT(T, 64, 1e-900)), Policy()); +#endif } void force_instantiate()const{} }; diff --git a/3party/boost/boost/math/special_functions/expm1.hpp b/3party/boost/boost/math/special_functions/expm1.hpp index 9ff2541fb1..51e3aa1a86 100644 --- a/3party/boost/boost/math/special_functions/expm1.hpp +++ b/3party/boost/boost/math/special_functions/expm1.hpp @@ -151,8 +151,8 @@ T expm1_imp(T x, const mpl::int_<53>&, const P& pol) return x; static const float Y = 0.10281276702880859e1f; - static const T n[] = { -0.28127670288085937e-1, 0.51278186299064534e0, -0.6310029069350198e-1, 0.11638457975729296e-1, -0.52143390687521003e-3, 0.21491399776965688e-4 }; - static const T d[] = { 1, -0.45442309511354755e0, 0.90850389570911714e-1, -0.10088963629815502e-1, 0.63003407478692265e-3, -0.17976570003654402e-4 }; + static const T n[] = { static_cast(-0.28127670288085937e-1), static_cast(0.51278186299064534e0), static_cast(-0.6310029069350198e-1), static_cast(0.11638457975729296e-1), static_cast(-0.52143390687521003e-3), static_cast(0.21491399776965688e-4) }; + static const T d[] = { 1, static_cast(-0.45442309511354755e0), static_cast(0.90850389570911714e-1), static_cast(-0.10088963629815502e-1), static_cast(0.63003407478692265e-3), static_cast(-0.17976570003654402e-4) }; T result = x * Y + x * tools::evaluate_polynomial(n, x) / tools::evaluate_polynomial(d, x); return result; diff --git a/3party/boost/boost/math/special_functions/fpclassify.hpp b/3party/boost/boost/math/special_functions/fpclassify.hpp index 2abec5fa84..6f92d18a7a 100644 --- a/3party/boost/boost/math/special_functions/fpclassify.hpp +++ b/3party/boost/boost/math/special_functions/fpclassify.hpp @@ -249,12 +249,13 @@ inline int fpclassify BOOST_NO_MACRO_EXPAND(T t) { typedef typename detail::fp_traits::type traits; typedef typename traits::method method; + typedef typename tools::promote_args::type value_type; #ifdef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS if(std::numeric_limits::is_specialized && detail::is_generic_tag_false(static_cast(0))) - return detail::fpclassify_imp(t, detail::generic_tag()); - return detail::fpclassify_imp(t, method()); + return detail::fpclassify_imp(static_cast(t), detail::generic_tag()); + return detail::fpclassify_imp(static_cast(t), method()); #else - return detail::fpclassify_imp(t, method()); + return detail::fpclassify_imp(static_cast(t), method()); #endif } @@ -312,7 +313,8 @@ inline bool (isfinite)(T x) typedef typename detail::fp_traits::type traits; typedef typename traits::method method; typedef typename boost::is_floating_point::type fp_tag; - return detail::isfinite_impl(x, method()); + typedef typename tools::promote_args::type value_type; + return detail::isfinite_impl(static_cast(x), method()); } //------------------------------------------------------------------------------ @@ -371,7 +373,8 @@ inline bool (isnormal)(T x) typedef typename detail::fp_traits::type traits; typedef typename traits::method method; typedef typename boost::is_floating_point::type fp_tag; - return detail::isnormal_impl(x, method()); + typedef typename tools::promote_args::type value_type; + return detail::isnormal_impl(static_cast(x), method()); } //------------------------------------------------------------------------------ @@ -448,7 +451,8 @@ inline bool (isinf)(T x) typedef typename detail::fp_traits::type traits; typedef typename traits::method method; typedef typename boost::is_floating_point::type fp_tag; - return detail::isinf_impl(x, method()); + typedef typename tools::promote_args::type value_type; + return detail::isinf_impl(static_cast(x), method()); } //------------------------------------------------------------------------------ diff --git a/3party/boost/boost/math/special_functions/hankel.hpp b/3party/boost/boost/math/special_functions/hankel.hpp index bc3fc2d742..76ceb65d00 100644 --- a/3party/boost/boost/math/special_functions/hankel.hpp +++ b/3party/boost/boost/math/special_functions/hankel.hpp @@ -28,7 +28,7 @@ std::complex hankel_imp(T v, T x, const bessel_no_int_tag&, const Policy& pol std::complex j_result, y_result; if(isint_v) { - int s = (iround(j) & 1) ? -1 : 1; + int s = (iround(v) & 1) ? -1 : 1; j_result = j * s; y_result = T(s) * (y - (2 / constants::pi()) * (log(-x) - log(cx)) * j); } @@ -83,7 +83,7 @@ template inline std::complex hankel_imp(int v, T x, const bessel_int_tag&, const Policy& pol, int sign) { BOOST_MATH_STD_USING - if((std::abs(v < 200)) && (x > 0)) + if((std::abs(v) < 200) && (x > 0)) return std::complex(bessel_jn(v, x, pol), sign * bessel_yn(v, x, pol)); return hankel_imp(static_cast(v), x, bessel_no_int_tag(), pol, sign); } @@ -130,7 +130,7 @@ inline std::complex >: } template -inline std::complex::result_type> sph_hankel_1(T1 v, T2 x, const Policy& pol) +inline std::complex::result_type> sph_hankel_1(T1 v, T2 x, const Policy&) { BOOST_FPU_EXCEPTION_GUARD typedef typename detail::bessel_traits::result_type result_type; @@ -152,7 +152,7 @@ inline std::complex >: } template -inline std::complex::result_type> sph_hankel_2(T1 v, T2 x, const Policy& pol) +inline std::complex::result_type> sph_hankel_2(T1 v, T2 x, const Policy&) { BOOST_FPU_EXCEPTION_GUARD typedef typename detail::bessel_traits::result_type result_type; @@ -175,4 +175,5 @@ inline std::complex >: }} // namespaces -#endif // BOOST_MATH_HANKEL_HPP \ No newline at end of file +#endif // BOOST_MATH_HANKEL_HPP + diff --git a/3party/boost/boost/math/special_functions/jacobi_elliptic.hpp b/3party/boost/boost/math/special_functions/jacobi_elliptic.hpp new file mode 100644 index 0000000000..a450796532 --- /dev/null +++ b/3party/boost/boost/math/special_functions/jacobi_elliptic.hpp @@ -0,0 +1,320 @@ +// Copyright John Maddock 2012. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt +// or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_JACOBI_ELLIPTIC_HPP +#define BOOST_MATH_JACOBI_ELLIPTIC_HPP + +#include +#include +#include + +namespace boost{ namespace math{ + +namespace detail{ + +template +T jacobi_recurse(const T& x, const T& k, T anm1, T bnm1, unsigned N, T* pTn, const Policy& pol) +{ + BOOST_MATH_STD_USING + ++N; + T Tn; + T cn = (anm1 - bnm1) / 2; + T an = (anm1 + bnm1) / 2; + if(cn < policies::get_epsilon()) + { + Tn = ldexp(T(1), (int)N) * x * an; + } + else + Tn = jacobi_recurse(x, k, an, sqrt(anm1 * bnm1), N, 0, pol); + if(pTn) + *pTn = Tn; + return (Tn + asin((cn / an) * sin(Tn))) / 2; +} + +template +T jacobi_imp(const T& x, const T& k, T* cn, T* dn, const Policy& pol, const char* function) +{ + BOOST_MATH_STD_USING + if(k < 0) + { + *cn = policies::raise_domain_error(function, "Modulus k must be positive but got %1%.", k, pol); + *dn = *cn; + return *cn; + } + if(k > 1) + { + T xp = x * k; + T kp = 1 / k; + T snp, cnp, dnp; + snp = jacobi_imp(xp, kp, &cnp, &dnp, pol, function); + *cn = dnp; + *dn = cnp; + return snp * kp; + } + // + // Special cases first: + // + if(x == 0) + { + *cn = *dn = 1; + return 0; + } + if(k == 0) + { + *cn = cos(x); + *dn = 1; + return sin(x); + } + if(k == 1) + { + *cn = *dn = 1 / cosh(x); + return tanh(x); + } + // + // Asymptotic forms from A&S 16.13: + // + if(k < tools::forth_root_epsilon()) + { + T su = sin(x); + T cu = cos(x); + T m = k * k; + *dn = 1 - m * su * su / 2; + *cn = cu + m * (x - su * cu) * su / 4; + return su - m * (x - su * cu) * cu / 4; + } + /* Can't get this to work to adequate precision - disabled for now... + // + // Asymptotic forms from A&S 16.15: + // + if(k > 1 - tools::root_epsilon()) + { + T tu = tanh(x); + T su = sinh(x); + T cu = cosh(x); + T sec = 1 / cu; + T kp = 1 - k; + T m1 = 2 * kp - kp * kp; + *dn = sec + m1 * (su * cu + x) * tu * sec / 4; + *cn = sec - m1 * (su * cu - x) * tu * sec / 4; + T sn = tu; + T sn2 = m1 * (x * sec * sec - tu) / 4; + T sn3 = (72 * x * cu + 4 * (8 * x * x - 5) * su - 19 * sinh(3 * x) + sinh(5 * x)) * sec * sec * sec * m1 * m1 / 512; + return sn + sn2 - sn3; + }*/ + T T1; + T kc = 1 - k; + T k_prime = k < 0.5 ? T(sqrt(1 - k * k)) : T(sqrt(2 * kc - kc * kc)); + T T0 = jacobi_recurse(x, k, T(1), k_prime, 0, &T1, pol); + *cn = cos(T0); + *dn = cos(T0) / cos(T1 - T0); + return sin(T0); +} + +} // namespace detail + +template +inline typename tools::promote_args::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn, const Policy&) +{ + BOOST_FPU_EXCEPTION_GUARD + typedef typename tools::promote_args::type result_type; + typedef typename policies::evaluation::type value_type; + typedef typename policies::normalise< + Policy, + policies::promote_float, + policies::promote_double, + policies::discrete_quantile<>, + policies::assert_undefined<> >::type forwarding_policy; + + static const char* function = "boost::math::jacobi_elliptic<%1%>(%1%)"; + + value_type sn, cn, dn; + sn = detail::jacobi_imp(static_cast(theta), static_cast(k), &cn, &dn, forwarding_policy(), function); + if(pcn) + *pcn = policies::checked_narrowing_cast(cn, function); + if(pdn) + *pdn = policies::checked_narrowing_cast(dn, function); + return policies::checked_narrowing_cast(sn, function);; +} + +template +inline typename tools::promote_args::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn) +{ + return jacobi_elliptic(k, theta, pcn, pdn, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_sn(U k, T theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + return jacobi_elliptic(static_cast(k), static_cast(theta), static_cast(0), static_cast(0), pol); +} + +template +inline typename tools::promote_args::type jacobi_sn(U k, T theta) +{ + return jacobi_sn(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_cn(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type cn; + jacobi_elliptic(static_cast(k), static_cast(theta), &cn, static_cast(0), pol); + return cn; +} + +template +inline typename tools::promote_args::type jacobi_cn(T k, U theta) +{ + return jacobi_cn(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_dn(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type dn; + jacobi_elliptic(static_cast(k), static_cast(theta), static_cast(0), &dn, pol); + return dn; +} + +template +inline typename tools::promote_args::type jacobi_dn(T k, U theta) +{ + return jacobi_dn(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_cd(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type cn, dn; + jacobi_elliptic(static_cast(k), static_cast(theta), &cn, &dn, pol); + return cn / dn; +} + +template +inline typename tools::promote_args::type jacobi_cd(T k, U theta) +{ + return jacobi_cd(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_dc(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type cn, dn; + jacobi_elliptic(static_cast(k), static_cast(theta), &cn, &dn, pol); + return dn / cn; +} + +template +inline typename tools::promote_args::type jacobi_dc(T k, U theta) +{ + return jacobi_dc(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_ns(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + return 1 / jacobi_elliptic(static_cast(k), static_cast(theta), static_cast(0), static_cast(0), pol); +} + +template +inline typename tools::promote_args::type jacobi_ns(T k, U theta) +{ + return jacobi_ns(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_sd(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type sn, dn; + sn = jacobi_elliptic(static_cast(k), static_cast(theta), static_cast(0), &dn, pol); + return sn / dn; +} + +template +inline typename tools::promote_args::type jacobi_sd(T k, U theta) +{ + return jacobi_sd(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_ds(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type sn, dn; + sn = jacobi_elliptic(static_cast(k), static_cast(theta), static_cast(0), &dn, pol); + return dn / sn; +} + +template +inline typename tools::promote_args::type jacobi_ds(T k, U theta) +{ + return jacobi_ds(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_nc(T k, U theta, const Policy& pol) +{ + return 1 / jacobi_cn(k, theta, pol); +} + +template +inline typename tools::promote_args::type jacobi_nc(T k, U theta) +{ + return jacobi_nc(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_nd(T k, U theta, const Policy& pol) +{ + return 1 / jacobi_dn(k, theta, pol); +} + +template +inline typename tools::promote_args::type jacobi_nd(T k, U theta) +{ + return jacobi_nd(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_sc(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type sn, cn; + sn = jacobi_elliptic(static_cast(k), static_cast(theta), &cn, static_cast(0), pol); + return sn / cn; +} + +template +inline typename tools::promote_args::type jacobi_sc(T k, U theta) +{ + return jacobi_sc(k, theta, policies::policy<>()); +} + +template +inline typename tools::promote_args::type jacobi_cs(T k, U theta, const Policy& pol) +{ + typedef typename tools::promote_args::type result_type; + result_type sn, cn; + sn = jacobi_elliptic(static_cast(k), static_cast(theta), &cn, static_cast(0), pol); + return cn / sn; +} + +template +inline typename tools::promote_args::type jacobi_cs(T k, U theta) +{ + return jacobi_cs(k, theta, policies::policy<>()); +} + +}} // namespaces + +#endif // BOOST_MATH_JACOBI_ELLIPTIC_HPP diff --git a/3party/boost/boost/math/special_functions/math_fwd.hpp b/3party/boost/boost/math/special_functions/math_fwd.hpp index 982cdf7ca3..6669e3fe39 100644 --- a/3party/boost/boost/math/special_functions/math_fwd.hpp +++ b/3party/boost/boost/math/special_functions/math_fwd.hpp @@ -28,7 +28,6 @@ #include #include #include -#include #define BOOST_NO_MACRO_EXPAND /**/ @@ -639,6 +638,30 @@ namespace boost template std::complex >::result_type> sph_hankel_2(T1 v, T2 x); + template + typename tools::promote_args::type airy_ai(T x, const Policy&); + + template + typename tools::promote_args::type airy_ai(T x); + + template + typename tools::promote_args::type airy_bi(T x, const Policy&); + + template + typename tools::promote_args::type airy_bi(T x); + + template + typename tools::promote_args::type airy_ai_prime(T x, const Policy&); + + template + typename tools::promote_args::type airy_ai_prime(T x); + + template + typename tools::promote_args::type airy_bi_prime(T x, const Policy&); + + template + typename tools::promote_args::type airy_bi_prime(T x); + template typename tools::promote_args::type sin_pi(T x, const Policy&); @@ -713,6 +736,86 @@ namespace boost template typename tools::promote_args::type owens_t(T1 h, T2 a); + // Jacobi Functions: + template + typename tools::promote_args::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn, const Policy&); + + template + typename tools::promote_args::type jacobi_elliptic(T k, T theta, T* pcn = 0, T* pdn = 0); + + template + typename tools::promote_args::type jacobi_sn(U k, T theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_sn(U k, T theta); + + template + typename tools::promote_args::type jacobi_cn(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_cn(T k, U theta); + + template + typename tools::promote_args::type jacobi_dn(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_dn(T k, U theta); + + template + typename tools::promote_args::type jacobi_cd(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_cd(T k, U theta); + + template + typename tools::promote_args::type jacobi_dc(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_dc(T k, U theta); + + template + typename tools::promote_args::type jacobi_ns(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_ns(T k, U theta); + + template + typename tools::promote_args::type jacobi_sd(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_sd(T k, U theta); + + template + typename tools::promote_args::type jacobi_ds(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_ds(T k, U theta); + + template + typename tools::promote_args::type jacobi_nc(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_nc(T k, U theta); + + template + typename tools::promote_args::type jacobi_nd(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_nd(T k, U theta); + + template + typename tools::promote_args::type jacobi_sc(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_sc(T k, U theta); + + template + typename tools::promote_args::type jacobi_cs(T k, U theta, const Policy& pol); + + template + typename tools::promote_args::type jacobi_cs(T k, U theta); + + template typename tools::promote_args::type zeta(T s); @@ -1114,6 +1217,77 @@ namespace boost template \ inline std::complex::result_type> sph_hankel_2(T1 v, T2 x)\ { return boost::math::sph_hankel_2(v, x, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_elliptic(T k, T theta, T* pcn, T* pdn)\ + { return boost::math::jacobi_elliptic(k, theta, pcn, pdn, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_sn(U k, T theta)\ + { return boost::math::jacobi_sn(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_cn(T k, U theta)\ + { return boost::math::jacobi_cn(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_dn(T k, U theta)\ + { return boost::math::jacobi_dn(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_cd(T k, U theta)\ + { return boost::math::jacobi_cd(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_dc(T k, U theta)\ + { return boost::math::jacobi_dc(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_ns(T k, U theta)\ + { return boost::math::jacobi_ns(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_sd(T k, U theta)\ + { return boost::math::jacobi_sd(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_ds(T k, U theta)\ + { return boost::math::jacobi_ds(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_nc(T k, U theta)\ + { return boost::math::jacobi_nc(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_nd(T k, U theta)\ + { return boost::math::jacobi_nd(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_sc(T k, U theta)\ + { return boost::math::jacobi_sc(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type jacobi_cs(T k, U theta)\ + { return boost::math::jacobi_cs(k, theta, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type airy_ai(T x)\ + { return boost::math::airy_ai(x, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type airy_bi(T x)\ + { return boost::math::airy_bi(x, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type airy_ai_prime(T x)\ + { return boost::math::airy_ai_prime(x, Policy()); }\ + \ + template \ + inline typename boost::math::tools::promote_args::type airy_bi_prime(T x)\ + { return boost::math::airy_bi_prime(x, Policy()); }\ + \ + + diff --git a/3party/boost/boost/math/special_functions/next.hpp b/3party/boost/boost/math/special_functions/next.hpp index 6c91cd1e38..b8a5d2ad08 100644 --- a/3party/boost/boost/math/special_functions/next.hpp +++ b/3party/boost/boost/math/special_functions/next.hpp @@ -26,7 +26,13 @@ namespace detail{ template inline T get_smallest_value(mpl::true_ const&) { - return std::numeric_limits::denorm_min(); + // + // numeric_limits lies about denorms being present - particularly + // when this can be turned on or off at runtime, as is the case + // when using the SSE2 registers in DAZ or FTZ mode. + // + static const T m = std::numeric_limits::denorm_min(); + return (0 == m) ? tools::min_value() : m; } template @@ -45,6 +51,49 @@ inline T get_smallest_value() #endif } +// +// Returns the smallest value that won't generate denorms when +// we calculate the value of the least-significant-bit: +// +template +T get_min_shift_value(); + +template +struct min_shift_initializer +{ + struct init + { + init() + { + do_init(); + } + static void do_init() + { + get_min_shift_value(); + } + void force_instantiate()const{} + }; + static const init initializer; + static void force_instantiate() + { + initializer.force_instantiate(); + } +}; + +template +const typename min_shift_initializer::init min_shift_initializer::initializer; + + +template +inline T get_min_shift_value() +{ + BOOST_MATH_STD_USING + static const T val = ldexp(tools::min_value(), tools::digits() + 1); + min_shift_initializer::force_instantiate(); + + return val; +} + } template @@ -54,7 +103,9 @@ T float_next(const T& val, const Policy& pol) int expon; static const char* function = "float_next<%1%>(%1%)"; - if(!(boost::math::isfinite)(val)) + int fpclass = (boost::math::fpclassify)(val); + + if((fpclass == FP_NAN) || (fpclass == FP_INFINITE)) { if(val < 0) return -tools::max_value(); @@ -69,6 +120,16 @@ T float_next(const T& val, const Policy& pol) if(val == 0) return detail::get_smallest_value(); + if((fpclass != FP_SUBNORMAL) && (fpclass != FP_ZERO) && (fabs(val) < detail::get_min_shift_value()) && (val != -tools::min_value())) + { + // + // Special case: if the value of the least significant bit is a denorm, and the result + // would not be a denorm, then shift the input, increment, and shift back. + // This avoids issues with the Intel SSE2 registers when the FTZ or DAZ flags are set. + // + return ldexp(float_next(T(ldexp(val, 2 * tools::digits())), pol), -2 * tools::digits()); + } + if(-0.5f == frexp(val, &expon)) --expon; // reduce exponent when val is a power of two, and negative. T diff = ldexp(T(1), expon - tools::digits()); @@ -77,7 +138,12 @@ T float_next(const T& val, const Policy& pol) return val + diff; } -#ifdef BOOST_MSVC +#if 0 //def BOOST_MSVC +// +// We used to use ::_nextafter here, but doing so fails when using +// the SSE2 registers if the FTZ or DAZ flags are set, so use our own +// - albeit slower - code instead as at least that gives the correct answer. +// template inline double float_next(const double& val, const Policy& pol) { @@ -108,7 +174,9 @@ T float_prior(const T& val, const Policy& pol) int expon; static const char* function = "float_prior<%1%>(%1%)"; - if(!(boost::math::isfinite)(val)) + int fpclass = (boost::math::fpclassify)(val); + + if((fpclass == FP_NAN) || (fpclass == FP_INFINITE)) { if(val > 0) return tools::max_value(); @@ -123,6 +191,16 @@ T float_prior(const T& val, const Policy& pol) if(val == 0) return -detail::get_smallest_value(); + if((fpclass != FP_SUBNORMAL) && (fpclass != FP_ZERO) && (fabs(val) < detail::get_min_shift_value()) && (val != tools::min_value())) + { + // + // Special case: if the value of the least significant bit is a denorm, and the result + // would not be a denorm, then shift the input, increment, and shift back. + // This avoids issues with the Intel SSE2 registers when the FTZ or DAZ flags are set. + // + return ldexp(float_prior(T(ldexp(val, 2 * tools::digits())), pol), -2 * tools::digits()); + } + T remain = frexp(val, &expon); if(remain == 0.5) --expon; // when val is a power of two we must reduce the exponent @@ -132,7 +210,12 @@ T float_prior(const T& val, const Policy& pol) return val - diff; } -#ifdef BOOST_MSVC +#if 0 //def BOOST_MSVC +// +// We used to use ::_nextafter here, but doing so fails when using +// the SSE2 registers if the FTZ or DAZ flags are set, so use our own +// - albeit slower - code instead as at least that gives the correct answer. +// template inline double float_prior(const double& val, const Policy& pol) { @@ -188,22 +271,22 @@ T float_distance(const T& a, const T& b, const Policy& pol) // Special cases: // if(a > b) - return -float_distance(b, a); + return -float_distance(b, a, pol); if(a == b) return 0; if(a == 0) - return 1 + fabs(float_distance(static_cast(boost::math::sign(b) * detail::get_smallest_value()), b, pol)); + return 1 + fabs(float_distance(static_cast((b < 0) ? -detail::get_smallest_value() : detail::get_smallest_value()), b, pol)); if(b == 0) - return 1 + fabs(float_distance(static_cast(boost::math::sign(a) * detail::get_smallest_value()), a, pol)); + return 1 + fabs(float_distance(static_cast((a < 0) ? -detail::get_smallest_value() : detail::get_smallest_value()), a, pol)); if(boost::math::sign(a) != boost::math::sign(b)) - return 2 + fabs(float_distance(static_cast(boost::math::sign(b) * detail::get_smallest_value()), b, pol)) - + fabs(float_distance(static_cast(boost::math::sign(a) * detail::get_smallest_value()), a, pol)); + return 2 + fabs(float_distance(static_cast((b < 0) ? -detail::get_smallest_value() : detail::get_smallest_value()), b, pol)) + + fabs(float_distance(static_cast((a < 0) ? -detail::get_smallest_value() : detail::get_smallest_value()), a, pol)); // // By the time we get here, both a and b must have the same sign, we want // b > a and both postive for the following logic: // if(a < 0) - return float_distance(static_cast(-b), static_cast(-a)); + return float_distance(static_cast(-b), static_cast(-a), pol); BOOST_ASSERT(a >= 0); BOOST_ASSERT(b >= a); @@ -230,10 +313,30 @@ T float_distance(const T& a, const T& b, const Policy& pol) // Use compensated double-double addition to avoid rounding // errors in the subtraction: // - T mb = -(std::min)(upper, b); - T x = a + mb; - T z = x - a; - T y = (a - (x - z)) + (mb - z); + T mb, x, y, z; + if(((boost::math::fpclassify)(a) == FP_SUBNORMAL) || (b - a < tools::min_value())) + { + // + // Special case - either one end of the range is a denormal, or else the difference is. + // The regular code will fail if we're using the SSE2 registers on Intel and either + // the FTZ or DAZ flags are set. + // + T a2 = ldexp(a, tools::digits()); + T b2 = ldexp(b, tools::digits()); + mb = -(std::min)(T(ldexp(upper, tools::digits())), b2); + x = a2 + mb; + z = x - a2; + y = (a2 - (x - z)) + (mb - z); + + expon -= tools::digits(); + } + else + { + mb = -(std::min)(upper, b); + x = a + mb; + z = x - a; + y = (a - (x - z)) + (mb - z); + } if(x < 0) { x = -x; @@ -256,11 +359,15 @@ T float_distance(const T& a, const T& b) template T float_advance(T val, int distance, const Policy& pol) { + BOOST_MATH_STD_USING // // Error handling: // static const char* function = "float_advance<%1%>(%1%, int)"; - if(!(boost::math::isfinite)(val)) + + int fpclass = (boost::math::fpclassify)(val); + + if((fpclass == FP_NAN) || (fpclass == FP_INFINITE)) return policies::raise_domain_error( function, "Argument val must be finite, but got %1%", val, pol); @@ -273,7 +380,25 @@ T float_advance(T val, int distance, const Policy& pol) return float_next(val, pol); if(distance == -1) return float_prior(val, pol); - BOOST_MATH_STD_USING + + if(fabs(val) < detail::get_min_shift_value()) + { + // + // Special case: if the value of the least significant bit is a denorm, + // implement in terms of float_next/float_prior. + // This avoids issues with the Intel SSE2 registers when the FTZ or DAZ flags are set. + // + if(distance > 0) + { + do{ val = float_next(val, pol); } while(--distance); + } + else + { + do{ val = float_prior(val, pol); } while(++distance); + } + return val; + } + int expon; frexp(val, &expon); T limit = ldexp((distance < 0 ? T(0.5f) : T(1)), expon); @@ -297,6 +422,10 @@ T float_advance(T val, int distance, const Policy& pol) expon++; } limit_distance = float_distance(val, limit); + if(distance && (limit_distance == 0)) + { + policies::raise_evaluation_error(function, "Internal logic failed while trying to increment floating point value %1%: most likely your FPU is in non-IEEE conforming mode.", val, pol); + } } if((0.5f == frexp(val, &expon)) && (distance < 0)) --expon; diff --git a/3party/boost/boost/math/special_functions/owens_t.hpp b/3party/boost/boost/math/special_functions/owens_t.hpp index 98d6380c39..0765b2a493 100644 --- a/3party/boost/boost/math/special_functions/owens_t.hpp +++ b/3party/boost/boost/math/special_functions/owens_t.hpp @@ -1,4 +1,4 @@ -// (C) Benjamin Sobotta 2012 +// Copyright Benjamin Sobotta 2012 // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file @@ -219,7 +219,7 @@ namespace boost BOOST_MATH_STD_USING using namespace boost::math::constants; - const unsigned short m = 20; + const unsigned short m = 20; static const RealType c2[] = { @@ -595,7 +595,7 @@ namespace boost term = one_minus_dj_sum * a_pow / (2 * j + 1); c = b - c; sum += c * term; - abs_err += ldexp(std::max(T(fabs(sum)), T(fabs(c*term))), -tools::digits()); + abs_err += ldexp((std::max)(T(fabs(sum)), T(fabs(c*term))), -tools::digits()); b = (j + n) * (j - n) * b / ((j + T(0.5)) * (j + 1)); ++j; // diff --git a/3party/boost/boost/math/tools/big_constant.hpp b/3party/boost/boost/math/tools/big_constant.hpp index 119063164a..495f89c132 100644 --- a/3party/boost/boost/math/tools/big_constant.hpp +++ b/3party/boost/boost/math/tools/big_constant.hpp @@ -53,7 +53,7 @@ inline BOOST_CONSTEXPR const char* make_big_value(long double, const char* s, mp // For constants too huge for any conceivable long double (and which generate compiler errors if we try and declare them as such): // #define BOOST_MATH_HUGE_CONSTANT(T, D, x)\ - boost::math::tools::make_big_value(0.0L, BOOST_STRINGIZE(x), mpl::bool_(), boost::is_convertible()) + boost::math::tools::make_big_value(0.0L, BOOST_STRINGIZE(x), mpl::bool_::value || (std::numeric_limits::is_specialized && std::numeric_limits::max_exponent <= std::numeric_limits::max_exponent)>(), boost::is_convertible()) }}} // namespaces diff --git a/3party/boost/boost/math/tools/remez.hpp b/3party/boost/boost/math/tools/remez.hpp index afcbe25afa..5c65afc42f 100644 --- a/3party/boost/boost/math/tools/remez.hpp +++ b/3party/boost/boost/math/tools/remez.hpp @@ -449,14 +449,14 @@ T remez_minimax::iterate() A(i, j + offsetN) = x; if(j < orderD) { - T mult = rel_error ? (b[i] - sign * fabs(b[i]) * Elast): (b[i] - sign * Elast); + T mult = rel_error ? T(b[i] - sign * fabs(b[i]) * Elast): T(b[i] - sign * Elast); A(i, j + offsetD) = -x * mult; } x *= x0; } // The last variable to be solved for is the error term, // sign changes with each control point: - T E = rel_error ? sign * fabs(b[i]) : sign; + T E = rel_error ? T(sign * fabs(b[i])) : T(sign); A(i, unknowns - 1) = E; sign = -sign; } @@ -478,7 +478,7 @@ T remez_minimax::iterate() // solution = boost::math::tools::solve(A, b); - err_err = (Elast != 0) ? fabs((fabs(solution[unknowns-1]) - fabs(Elast)) / fabs(Elast)) : 1; + err_err = (Elast != 0) ? T(fabs((fabs(solution[unknowns-1]) - fabs(Elast)) / fabs(Elast))) : T(1); }while(orderD && (convergence_count++ < 80) && (err_err > 0.001)); // diff --git a/3party/boost/boost/math/tr1_c_macros.ipp b/3party/boost/boost/math/tr1_c_macros.ipp index c173639af5..ec8e7da3ef 100644 --- a/3party/boost/boost/math/tr1_c_macros.ipp +++ b/3party/boost/boost/math/tr1_c_macros.ipp @@ -807,4 +807,4 @@ #endif #define sph_neumannl boost_sph_neumannl -#endif // BOOST_MATH_C_MACROS_IPP \ No newline at end of file +#endif // BOOST_MATH_C_MACROS_IPP diff --git a/3party/boost/boost/numeric/ublas/matrix_sparse.hpp b/3party/boost/boost/numeric/ublas/matrix_sparse.hpp index 9324108eb1..42c0510b3d 100644 --- a/3party/boost/boost/numeric/ublas/matrix_sparse.hpp +++ b/3party/boost/boost/numeric/ublas/matrix_sparse.hpp @@ -1359,7 +1359,7 @@ namespace boost { namespace numeric { namespace ublas { #endif typedef const matrix_reference const_closure_type; typedef matrix_reference closure_type; - typedef mapped_vector vector_temporary_type; + typedef mapped_vector vector_temporary_type; typedef self_type matrix_temporary_type; typedef typename A::value_type::second_type vector_data_value_type; typedef sparse_tag storage_category; @@ -1530,7 +1530,7 @@ namespace boost { namespace numeric { namespace ublas { template // Container assignment without temporary BOOST_UBLAS_INLINE mapped_vector_of_mapped_vector &operator = (const matrix_container &m) { - resize (m ().size1 (), m ().size2 ()); + resize (m ().size1 (), m ().size2 (), false); assign (m); return *this; } @@ -4391,17 +4391,69 @@ namespace boost { namespace numeric { namespace ublas { m1.swap (m2); } + // replacement if STL lower bound algorithm for use of inplace_merge + array_size_type lower_bound (array_size_type beg, array_size_type end, array_size_type target) const { + while (end > beg) { + array_size_type mid = (beg + end) / 2; + if (((index1_data_[mid] < index1_data_[target]) || + ((index1_data_[mid] == index1_data_[target]) && + (index2_data_[mid] < index2_data_[target])))) { + beg = mid + 1; + } else { + end = mid; + } + } + return beg; + } + + // specialized replacement of STL inplace_merge to avoid compilation + // problems with respect to the array_triple iterator + void inplace_merge (array_size_type beg, array_size_type mid, array_size_type end) const { + array_size_type len_lef = mid - beg; + array_size_type len_rig = end - mid; + + if (len_lef == 1 && len_rig == 1) { + if ((index1_data_[mid] < index1_data_[beg]) || + ((index1_data_[mid] == index1_data_[beg]) && (index2_data_[mid] < index2_data_[beg]))) + { + std::swap(index1_data_[beg], index1_data_[mid]); + std::swap(index2_data_[beg], index2_data_[mid]); + std::swap(value_data_[beg], value_data_[mid]); + } + } else if (len_lef > 0 && len_rig > 0) { + array_size_type lef_mid, rig_mid; + if (len_lef >= len_rig) { + lef_mid = (beg + mid) / 2; + rig_mid = lower_bound(mid, end, lef_mid); + } else { + rig_mid = (mid + end) / 2; + lef_mid = lower_bound(beg, mid, rig_mid); + } + std::rotate(&index1_data_[0] + lef_mid, &index1_data_[0] + mid, &index1_data_[0] + rig_mid); + std::rotate(&index2_data_[0] + lef_mid, &index2_data_[0] + mid, &index2_data_[0] + rig_mid); + std::rotate(&value_data_[0] + lef_mid, &value_data_[0] + mid, &value_data_[0] + rig_mid); + + array_size_type new_mid = lef_mid + rig_mid - mid; + inplace_merge(beg, lef_mid, new_mid); + inplace_merge(new_mid, rig_mid, end); + } + } + // Sorting and summation of duplicates BOOST_UBLAS_INLINE void sort () const { if (! sorted_ && filled_ > 0) { typedef index_triple_array array_triple; array_triple ita (filled_, index1_data_, index2_data_, value_data_); +#ifndef BOOST_UBLAS_COO_ALWAYS_DO_FULL_SORT const typename array_triple::iterator iunsorted = ita.begin () + sorted_filled_; // sort new elements and merge std::sort (iunsorted, ita.end ()); - std::inplace_merge (ita.begin (), iunsorted, ita.end ()); - + inplace_merge(0, sorted_filled_, filled_); +#else + const typename array_triple::iterator iunsorted = ita.begin (); + std::sort (iunsorted, ita.end ()); +#endif // sum duplicates with += and remove array_size_type filled = 0; for (array_size_type i = 1; i < filled_; ++ i) { diff --git a/3party/boost/boost/numeric/ublas/operation/num_columns.hpp b/3party/boost/boost/numeric/ublas/operation/num_columns.hpp index 30fcc7b638..ee48eea676 100644 --- a/3party/boost/boost/numeric/ublas/operation/num_columns.hpp +++ b/3party/boost/boost/numeric/ublas/operation/num_columns.hpp @@ -20,6 +20,8 @@ #include +#include +#include namespace boost { namespace numeric { namespace ublas { @@ -32,9 +34,9 @@ namespace boost { namespace numeric { namespace ublas { */ template BOOST_UBLAS_INLINE - typename MatrixExprT::size_type num_columns(MatrixExprT const& m) + typename matrix_traits::size_type num_columns(matrix_expression const& me) { - return m.size2(); + return me().size2(); } }}} // Namespace boost::numeric::ublas diff --git a/3party/boost/boost/numeric/ublas/operation/num_rows.hpp b/3party/boost/boost/numeric/ublas/operation/num_rows.hpp index 856256ff29..246aed3caf 100644 --- a/3party/boost/boost/numeric/ublas/operation/num_rows.hpp +++ b/3party/boost/boost/numeric/ublas/operation/num_rows.hpp @@ -5,7 +5,7 @@ * * \brief The \c num_rows operation. * - * Copyright (c) 2009, Marco Guazzone + * Copyright (c) 2009-2012, Marco Guazzone * * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE_1_0.txt or copy at @@ -19,6 +19,8 @@ #include +#include +#include namespace boost { namespace numeric { namespace ublas { @@ -31,9 +33,9 @@ namespace boost { namespace numeric { namespace ublas { */ template BOOST_UBLAS_INLINE - typename MatrixExprT::size_type num_rows(MatrixExprT const& m) + typename matrix_traits::size_type num_rows(matrix_expression const& me) { - return m.size1(); + return me().size1(); } }}} // Namespace boost::numeric::ublas diff --git a/3party/boost/boost/numeric/ublas/operation/size.hpp b/3party/boost/boost/numeric/ublas/operation/size.hpp index c5602d2fff..b42090ae7d 100644 --- a/3party/boost/boost/numeric/ublas/operation/size.hpp +++ b/3party/boost/boost/numeric/ublas/operation/size.hpp @@ -304,7 +304,7 @@ template BOOST_UBLAS_INLINE typename vector_traits::size_type size(vector_expression const& ve) { - return detail::size_by_dim_impl::template apply(ve); + return detail::size_by_dim_impl::apply(ve); } @@ -321,7 +321,7 @@ template BOOST_UBLAS_INLINE typename matrix_traits::size_type size(matrix_expression const& me) { - return detail::size_by_dim_impl::template apply(me); + return detail::size_by_dim_impl::apply(me); } @@ -341,7 +341,7 @@ typename ::boost::lazy_enable_if_c< detail::matrix_size_type >::type size(matrix_expression const& me) { - return detail::size_by_tag_impl::orientation_category>::template apply(me); + return detail::size_by_tag_impl::orientation_category>::apply(me); } }}} // Namespace boost::numeric::ublas diff --git a/3party/boost/boost/numeric/ublas/storage.hpp b/3party/boost/boost/numeric/ublas/storage.hpp index b7f9009b2e..7d421af278 100644 --- a/3party/boost/boost/numeric/ublas/storage.hpp +++ b/3party/boost/boost/numeric/ublas/storage.hpp @@ -1564,7 +1564,6 @@ namespace boost { namespace numeric { namespace ublas { template class index_pair : - private boost::noncopyable, public container_reference { typedef index_pair self_type; @@ -1734,7 +1733,6 @@ namespace boost { namespace numeric { namespace ublas { template class index_triple : - private boost::noncopyable, public container_reference { typedef index_triple self_type; diff --git a/3party/boost/boost/numeric/ublas/traits.hpp b/3party/boost/boost/numeric/ublas/traits.hpp index 6964031cb4..ae020700a6 100644 --- a/3party/boost/boost/numeric/ublas/traits.hpp +++ b/3party/boost/boost/numeric/ublas/traits.hpp @@ -41,6 +41,14 @@ namespace { // we'll find either std::abs or else another version via ADL: return abs (t); } + // unsigned types are always non-negative + template<> unsigned int boost_numeric_ublas_abs (const unsigned int& t) { + return t; + } + // unsigned types are always non-negative + template<> unsigned long boost_numeric_ublas_abs (const unsigned long& t) { + return t; + } } namespace boost { namespace numeric { namespace ublas { @@ -594,10 +602,10 @@ namespace boost { namespace numeric { namespace ublas { struct has_trivial_destructor : public boost::has_trivial_destructor {}; template - struct has_trivial_constructor > : public boost::true_type {}; + struct has_trivial_constructor > : public has_trivial_constructor {}; template - struct has_trivial_destructor > : public boost::true_type {}; + struct has_trivial_destructor > : public has_trivial_destructor {}; } diff --git a/3party/boost/boost/numeric/ublas/triangular.hpp b/3party/boost/boost/numeric/ublas/triangular.hpp index b537df969f..cce143f21f 100644 --- a/3party/boost/boost/numeric/ublas/triangular.hpp +++ b/3party/boost/boost/numeric/ublas/triangular.hpp @@ -1936,6 +1936,92 @@ namespace boost { namespace numeric { namespace ublas { } } } + + // Dense (proxy) case + template + BOOST_UBLAS_INLINE + void inplace_solve (const matrix_expression &e1, vector_expression &e2, + lower_tag, row_major_tag, dense_proxy_tag) { + typedef typename E2::size_type size_type; + typedef typename E2::difference_type difference_type; + typedef typename E2::value_type value_type; + + BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ()); + BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ()); + size_type size = e2 ().size (); + for (size_type n = 0; n < size; ++ n) { +#ifndef BOOST_UBLAS_SINGULAR_CHECK + BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ()); +#else + if (e1 () (n, n) == value_type/*zero*/()) + singular ().raise (); +#endif + value_type t = e2 () (n) /= e1 () (n, n); + if (t != value_type/*zero*/()) { + for (size_type m = n + 1; m < size; ++ m) + e2 () (m) -= e1 () (m, n) * t; + } + } + } + // Packed (proxy) case + template + BOOST_UBLAS_INLINE + void inplace_solve (const matrix_expression &e1, vector_expression &e2, + lower_tag, row_major_tag, packed_proxy_tag) { + typedef typename E2::size_type size_type; + typedef typename E2::difference_type difference_type; + typedef typename E2::value_type value_type; + + BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ()); + BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ()); + size_type size = e2 ().size (); + for (size_type n = 0; n < size; ++ n) { +#ifndef BOOST_UBLAS_SINGULAR_CHECK + BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ()); +#else + if (e1 () (n, n) == value_type/*zero*/()) + singular ().raise (); +#endif + value_type t = e2 () (n); + typename E1::const_iterator2 it2e1 (e1 ().find2 (1, n, 0)); + typename E1::const_iterator2 it2e1_end (e1 ().find2 (1, n, n)); + while (it2e1 != it2e1_end) { + t -= *it2e1 * e2 () (it2e1.index2()); + ++ it2e1; + } + e2() (n) = t / e1 () (n, n); + } + } + // Sparse (proxy) case + template + BOOST_UBLAS_INLINE + void inplace_solve (const matrix_expression &e1, vector_expression &e2, + lower_tag, row_major_tag, unknown_storage_tag) { + typedef typename E2::size_type size_type; + typedef typename E2::difference_type difference_type; + typedef typename E2::value_type value_type; + + BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ()); + BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ()); + size_type size = e2 ().size (); + for (size_type n = 0; n < size; ++ n) { +#ifndef BOOST_UBLAS_SINGULAR_CHECK + BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ()); +#else + if (e1 () (n, n) == value_type/*zero*/()) + singular ().raise (); +#endif + value_type t = e2 () (n); + typename E1::const_iterator2 it2e1 (e1 ().find2 (1, n, 0)); + typename E1::const_iterator2 it2e1_end (e1 ().find2 (1, n, n)); + while (it2e1 != it2e1_end) { + t -= *it2e1 * e2 () (it2e1.index2()); + ++ it2e1; + } + e2() (n) = t / e1 () (n, n); + } + } + // Redirectors :-) template BOOST_UBLAS_INLINE @@ -1950,8 +2036,8 @@ namespace boost { namespace numeric { namespace ublas { void inplace_solve (const matrix_expression &e1, vector_expression &e2, lower_tag, row_major_tag) { typedef typename E1::storage_category storage_category; - inplace_solve (e2, trans (e1), - upper_tag (), row_major_tag (), storage_category ()); + inplace_solve (e1, e2, + lower_tag (), row_major_tag (), storage_category ()); } // Dispatcher template @@ -2020,9 +2106,9 @@ namespace boost { namespace numeric { namespace ublas { if (t != value_type/*zero*/()) { typename E1::const_reverse_iterator1 it1e1 (e1 ().find1 (1, n, n)); typename E1::const_reverse_iterator1 it1e1_rend (e1 ().find1 (1, 0, n)); - difference_type m (it1e1_rend - it1e1); - while (-- m >= 0) - e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1; + while (it1e1 != it1e1_rend) { + e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1; + } } } } @@ -2049,11 +2135,100 @@ namespace boost { namespace numeric { namespace ublas { if (t != value_type/*zero*/()) { typename E1::const_reverse_iterator1 it1e1 (e1 ().find1 (1, n, n)); typename E1::const_reverse_iterator1 it1e1_rend (e1 ().find1 (1, 0, n)); - while (it1e1 != it1e1_rend) - e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1; + while (it1e1 != it1e1_rend) { + e2 () (it1e1.index1 ()) -= *it1e1 * t, ++ it1e1; + } } } } + + // Dense (proxy) case + template + BOOST_UBLAS_INLINE + void inplace_solve (const matrix_expression &e1, vector_expression &e2, + upper_tag, row_major_tag, dense_proxy_tag) { + typedef typename E2::size_type size_type; + typedef typename E2::difference_type difference_type; + typedef typename E2::value_type value_type; + + BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ()); + BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ()); + size_type size = e1 ().size1 (); + for (difference_type n = size-1; n >=0; -- n) { +#ifndef BOOST_UBLAS_SINGULAR_CHECK + BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ()); +#else + if (e1 () (n, n) == value_type/*zero*/()) + singular ().raise (); +#endif + value_type t = e2 () (n); + for (difference_type m = n + 1; m < e1 ().size2(); ++ m) { + t -= e1 () (n, m) * e2 () (m); + } + e2() (n) = t / e1 () (n, n); + } + } + // Packed (proxy) case + template + BOOST_UBLAS_INLINE + void inplace_solve (const matrix_expression &e1, vector_expression &e2, + upper_tag, row_major_tag, packed_proxy_tag) { + typedef typename E2::size_type size_type; + typedef typename E2::difference_type difference_type; + typedef typename E2::value_type value_type; + + BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ()); + BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ()); + size_type size = e1 ().size1 (); + for (difference_type n = size-1; n >=0; -- n) { +#ifndef BOOST_UBLAS_SINGULAR_CHECK + BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ()); +#else + if (e1 () (n, n) == value_type/*zero*/()) + singular ().raise (); +#endif + value_type t = e2 () (n); + typename E1::const_iterator2 it2e1 (e1 ().find2 (1, n, n+1)); + typename E1::const_iterator2 it2e1_end (e1 ().find2 (1, n, e1 ().size2 ())); + while (it2e1 != it2e1_end) { + t -= *it2e1 * e2 () (it2e1.index2()); + ++ it2e1; + } + e2() (n) = t / e1 () (n, n); + + } + } + // Sparse (proxy) case + template + BOOST_UBLAS_INLINE + void inplace_solve (const matrix_expression &e1, vector_expression &e2, + upper_tag, row_major_tag, unknown_storage_tag) { + typedef typename E2::size_type size_type; + typedef typename E2::difference_type difference_type; + typedef typename E2::value_type value_type; + + BOOST_UBLAS_CHECK (e1 ().size1 () == e1 ().size2 (), bad_size ()); + BOOST_UBLAS_CHECK (e1 ().size2 () == e2 ().size (), bad_size ()); + size_type size = e1 ().size1 (); + for (difference_type n = size-1; n >=0; -- n) { +#ifndef BOOST_UBLAS_SINGULAR_CHECK + BOOST_UBLAS_CHECK (e1 () (n, n) != value_type/*zero*/(), singular ()); +#else + if (e1 () (n, n) == value_type/*zero*/()) + singular ().raise (); +#endif + value_type t = e2 () (n); + typename E1::const_iterator2 it2e1 (e1 ().find2 (1, n, n+1)); + typename E1::const_iterator2 it2e1_end (e1 ().find2 (1, n, e1 ().size2 ())); + while (it2e1 != it2e1_end) { + t -= *it2e1 * e2 () (it2e1.index2()); + ++ it2e1; + } + e2() (n) = t / e1 () (n, n); + + } + } + // Redirectors :-) template BOOST_UBLAS_INLINE @@ -2068,8 +2243,8 @@ namespace boost { namespace numeric { namespace ublas { void inplace_solve (const matrix_expression &e1, vector_expression &e2, upper_tag, row_major_tag) { typedef typename E1::storage_category storage_category; - inplace_solve (e2, trans (e1), - lower_tag (), row_major_tag (), storage_category ()); + inplace_solve (e1, e2, + upper_tag (), row_major_tag (), storage_category ()); } // Dispatcher template @@ -2100,103 +2275,21 @@ namespace boost { namespace numeric { namespace ublas { return r; } - // Dense (proxy) case - template - BOOST_UBLAS_INLINE - void inplace_solve (vector_expression &e1, const matrix_expression &e2, - lower_tag, row_major_tag, dense_proxy_tag) { - typedef typename E1::size_type size_type; - typedef typename E1::difference_type difference_type; - typedef typename E1::value_type value_type; - BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ()); - BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ()); - size_type size = e1 ().size (); - for (difference_type n = size - 1; n >= 0; -- n) { -#ifndef BOOST_UBLAS_SINGULAR_CHECK - BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ()); -#else - if (e2 () (n, n) == value_type/*zero*/()) - singular ().raise (); -#endif - value_type t = e1 () (n) /= e2 () (n, n); - if (t != value_type/*zero*/()) { - for (difference_type m = n - 1; m >= 0; -- m) - e1 () (m) -= t * e2 () (n, m); - } - } - } - // Packed (proxy) case - template - BOOST_UBLAS_INLINE - void inplace_solve (vector_expression &e1, const matrix_expression &e2, - lower_tag, row_major_tag, packed_proxy_tag) { - typedef typename E1::size_type size_type; - typedef typename E1::difference_type difference_type; - typedef typename E1::value_type value_type; - - BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ()); - BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ()); - size_type size = e1 ().size (); - for (difference_type n = size - 1; n >= 0; -- n) { -#ifndef BOOST_UBLAS_SINGULAR_CHECK - BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ()); -#else - if (e2 () (n, n) == value_type/*zero*/()) - singular ().raise (); -#endif - value_type t = e1 () (n) /= e2 () (n, n); - if (t != value_type/*zero*/()) { - typename E2::const_reverse_iterator2 it2e2 (e2 ().find2 (1, n, n)); - typename E2::const_reverse_iterator2 it2e2_rend (e2 ().find2 (1, n, 0)); - difference_type m (it2e2_rend - it2e2); - while (-- m >= 0) - e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2; - } - } - } - // Sparse (proxy) case - template - BOOST_UBLAS_INLINE - void inplace_solve (vector_expression &e1, const matrix_expression &e2, - lower_tag, row_major_tag, unknown_storage_tag) { - typedef typename E1::size_type size_type; - typedef typename E1::difference_type difference_type; - typedef typename E1::value_type value_type; - - BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ()); - BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ()); - size_type size = e1 ().size (); - for (difference_type n = size - 1; n >= 0; -- n) { -#ifndef BOOST_UBLAS_SINGULAR_CHECK - BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ()); -#else - if (e2 () (n, n) == value_type/*zero*/()) - singular ().raise (); -#endif - value_type t = e1 () (n) /= e2 () (n, n); - if (t != value_type/*zero*/()) { - typename E2::const_reverse_iterator2 it2e2 (e2 ().find2 (1, n, n)); - typename E2::const_reverse_iterator2 it2e2_rend (e2 ().find2 (1, n, 0)); - while (it2e2 != it2e2_rend) - e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2; - } - } - } // Redirectors :-) template BOOST_UBLAS_INLINE void inplace_solve (vector_expression &e1, const matrix_expression &e2, lower_tag, row_major_tag) { - typedef typename E1::storage_category storage_category; - inplace_solve (e1, e2, - lower_tag (), row_major_tag (), storage_category ()); + typedef typename E2::storage_category storage_category; + inplace_solve (trans(e2), e1, + upper_tag (), column_major_tag (), storage_category ()); } template BOOST_UBLAS_INLINE void inplace_solve (vector_expression &e1, const matrix_expression &e2, lower_tag, column_major_tag) { - typedef typename E1::storage_category storage_category; + typedef typename E2::storage_category storage_category; inplace_solve (trans (e2), e1, upper_tag (), row_major_tag (), storage_category ()); } @@ -2218,103 +2311,21 @@ namespace boost { namespace numeric { namespace ublas { unit_lower_tag (), orientation_category ()); } - // Dense (proxy) case - template - BOOST_UBLAS_INLINE - void inplace_solve (vector_expression &e1, const matrix_expression &e2, - upper_tag, row_major_tag, dense_proxy_tag) { - typedef typename E1::size_type size_type; - typedef typename E1::difference_type difference_type; - typedef typename E1::value_type value_type; - BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ()); - BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ()); - size_type size = e1 ().size (); - for (size_type n = 0; n < size; ++ n) { -#ifndef BOOST_UBLAS_SINGULAR_CHECK - BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ()); -#else - if (e2 () (n, n) == value_type/*zero*/()) - singular ().raise (); -#endif - value_type t = e1 () (n) /= e2 () (n, n); - if (t != value_type/*zero*/()) { - for (size_type m = n + 1; m < size; ++ m) - e1 () (m) -= t * e2 () (n, m); - } - } - } - // Packed (proxy) case - template - BOOST_UBLAS_INLINE - void inplace_solve (vector_expression &e1, const matrix_expression &e2, - upper_tag, row_major_tag, packed_proxy_tag) { - typedef typename E1::size_type size_type; - typedef typename E1::difference_type difference_type; - typedef typename E1::value_type value_type; - - BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ()); - BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ()); - size_type size = e1 ().size (); - for (size_type n = 0; n < size; ++ n) { -#ifndef BOOST_UBLAS_SINGULAR_CHECK - BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ()); -#else - if (e2 () (n, n) == value_type/*zero*/()) - singular ().raise (); -#endif - value_type t = e1 () (n) /= e2 () (n, n); - if (t != value_type/*zero*/()) { - typename E2::const_iterator2 it2e2 (e2 ().find2 (1, n, n + 1)); - typename E2::const_iterator2 it2e2_end (e2 ().find2 (1, n, e2 ().size2 ())); - difference_type m (it2e2_end - it2e2); - while (-- m >= 0) - e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2; - } - } - } - // Sparse (proxy) case - template - BOOST_UBLAS_INLINE - void inplace_solve (vector_expression &e1, const matrix_expression &e2, - upper_tag, row_major_tag, unknown_storage_tag) { - typedef typename E1::size_type size_type; - typedef typename E1::difference_type difference_type; - typedef typename E1::value_type value_type; - - BOOST_UBLAS_CHECK (e1 ().size () == e2 ().size1 (), bad_size ()); - BOOST_UBLAS_CHECK (e2 ().size1 () == e2 ().size2 (), bad_size ()); - size_type size = e1 ().size (); - for (size_type n = 0; n < size; ++ n) { -#ifndef BOOST_UBLAS_SINGULAR_CHECK - BOOST_UBLAS_CHECK (e2 () (n, n) != value_type/*zero*/(), singular ()); -#else - if (e2 () (n, n) == value_type/*zero*/()) - singular ().raise (); -#endif - value_type t = e1 () (n) /= e2 () (n, n); - if (t != value_type/*zero*/()) { - typename E2::const_iterator2 it2e2 (e2 ().find2 (1, n, n + 1)); - typename E2::const_iterator2 it2e2_end (e2 ().find2 (1, n, e2 ().size2 ())); - while (it2e2 != it2e2_end) - e1 () (it2e2.index2 ()) -= *it2e2 * t, ++ it2e2; - } - } - } // Redirectors :-) template BOOST_UBLAS_INLINE void inplace_solve (vector_expression &e1, const matrix_expression &e2, upper_tag, row_major_tag) { - typedef typename E1::storage_category storage_category; - inplace_solve (e1, e2, - upper_tag (), row_major_tag (), storage_category ()); + typedef typename E2::storage_category storage_category; + inplace_solve (trans(e2), e1, + lower_tag (), column_major_tag (), storage_category ()); } template BOOST_UBLAS_INLINE void inplace_solve (vector_expression &e1, const matrix_expression &e2, upper_tag, column_major_tag) { - typedef typename E1::storage_category storage_category; + typedef typename E2::storage_category storage_category; inplace_solve (trans (e2), e1, lower_tag (), row_major_tag (), storage_category ()); } diff --git a/3party/boost/boost/numeric/ublas/vector_expression.hpp b/3party/boost/boost/numeric/ublas/vector_expression.hpp index a5cf3104ee..fe4d1c3f8a 100644 --- a/3party/boost/boost/numeric/ublas/vector_expression.hpp +++ b/3party/boost/boost/numeric/ublas/vector_expression.hpp @@ -1409,7 +1409,9 @@ namespace boost { namespace numeric { namespace ublas { // (v / t) [i] = v [i] / t template BOOST_UBLAS_INLINE + typename enable_if< is_convertible, typename vector_binary_scalar2_traits >::result_type + >::type operator / (const vector_expression &e1, const T2 &e2) { typedef typename vector_binary_scalar2_traits >::expression_type expression_type; diff --git a/3party/boost/boost/numeric/ublas/vector_sparse.hpp b/3party/boost/boost/numeric/ublas/vector_sparse.hpp index 99dcbcec11..ec343977d2 100644 --- a/3party/boost/boost/numeric/ublas/vector_sparse.hpp +++ b/3party/boost/boost/numeric/ublas/vector_sparse.hpp @@ -1801,16 +1801,63 @@ namespace boost { namespace numeric { namespace ublas { v1.swap (v2); } + // replacement if STL lower bound algorithm for use of inplace_merge + size_type lower_bound (size_type beg, size_type end, size_type target) const { + while (end > beg) { + size_type mid = (beg + end) / 2; + if (index_data_[mid] < index_data_[target]) { + beg = mid + 1; + } else { + end = mid; + } + } + return beg; + } + + // specialized replacement of STL inplace_merge to avoid compilation + // problems with respect to the array_triple iterator + void inplace_merge (size_type beg, size_type mid, size_type end) const { + size_type len_lef = mid - beg; + size_type len_rig = end - mid; + + if (len_lef == 1 && len_rig == 1) { + if (index_data_[mid] < index_data_[beg]) { + std::swap(index_data_[beg], index_data_[mid]); + std::swap(value_data_[beg], value_data_[mid]); + } + } else if (len_lef > 0 && len_rig > 0) { + size_type lef_mid, rig_mid; + if (len_lef >= len_rig) { + lef_mid = (beg + mid) / 2; + rig_mid = lower_bound(mid, end, lef_mid); + } else { + rig_mid = (mid + end) / 2; + lef_mid = lower_bound(beg, mid, rig_mid); + } + std::rotate(&index_data_[0] + lef_mid, &index_data_[0] + mid, &index_data_[0] + rig_mid); + std::rotate(&value_data_[0] + lef_mid, &value_data_[0] + mid, &value_data_[0] + rig_mid); + + size_type new_mid = lef_mid + rig_mid - mid; + inplace_merge(beg, lef_mid, new_mid); + inplace_merge(new_mid, rig_mid, end); + } + } + // Sorting and summation of duplicates BOOST_UBLAS_INLINE void sort () const { if (! sorted_ && filled_ > 0) { typedef index_pair_array array_pair; array_pair ipa (filled_, index_data_, value_data_); +#ifndef BOOST_UBLAS_COO_ALWAYS_DO_FULL_SORT const typename array_pair::iterator iunsorted = ipa.begin () + sorted_filled_; // sort new elements and merge std::sort (iunsorted, ipa.end ()); - std::inplace_merge (ipa.begin (), iunsorted, ipa.end ()); + inplace_merge(0, sorted_filled_, filled_); +#else + const typename array_pair::iterator iunsorted = ipa.begin (); + std::sort (iunsorted, ipa.end ()); +#endif // sum duplicates with += and remove size_type filled = 0; diff --git a/3party/boost/boost/optional/optional.hpp b/3party/boost/boost/optional/optional.hpp index ec9006eef9..0d6dba405d 100644 --- a/3party/boost/boost/optional/optional.hpp +++ b/3party/boost/boost/optional/optional.hpp @@ -890,12 +890,12 @@ bool operator >= ( optional const& x, none_t y ) template inline -bool operator == ( none_t x, optional const& y ) +bool operator == ( none_t , optional const& y ) { return equal_pointees(optional() ,y); } template inline -bool operator < ( none_t x, optional const& y ) +bool operator < ( none_t , optional const& y ) { return less_pointees(optional() ,y); } template diff --git a/3party/boost/boost/pending/indirect_cmp.hpp b/3party/boost/boost/pending/indirect_cmp.hpp index 638625cecd..14ee5314af 100644 --- a/3party/boost/boost/pending/indirect_cmp.hpp +++ b/3party/boost/boost/pending/indirect_cmp.hpp @@ -33,14 +33,15 @@ namespace boost { typedef typename boost::property_traits::key_type K; typedef K first_argument_type; typedef K second_argument_type; - typedef T result_type; + typedef bool result_type; inline indirect_cmp(const ReadablePropertyMap& df, const Compare& c = Compare()) : d(df), cmp(c) { } template inline bool operator()(const A& u, const B& v) const { - T du = get(d, u), dv = get(d, v); + const T& du = get(d, u); + const T& dv = get(d, v); return cmp(du, dv); } protected: diff --git a/3party/boost/boost/pending/property.hpp b/3party/boost/boost/pending/property.hpp index 93ebffbf3b..3053908d70 100644 --- a/3party/boost/boost/pending/property.hpp +++ b/3party/boost/boost/pending/property.hpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace boost { @@ -53,8 +54,8 @@ namespace boost { enum graph_bundle_t {graph_bundle}; // Code to look up one property in a property list: - template - struct lookup_one_property_internal {BOOST_STATIC_CONSTANT(bool, found = false);}; + template + struct lookup_one_property_internal {BOOST_STATIC_CONSTANT(bool, found = false); typedef void type;}; // Special-case properties (vertex_all, edge_all, graph_all) #define BGL_ALL_PROP(tag) \ @@ -93,8 +94,14 @@ namespace boost { private: \ typedef lookup_one_property_internal base_type; \ public: \ - static typename base_type::type& lookup(property& p, BOOST_JOIN(kind, _bundle_t)) {return base_type::lookup(p.m_base, BOOST_JOIN(kind, _bundle_t)());} \ - static const typename base_type::type& lookup(const property& p, BOOST_JOIN(kind, _bundle_t)) {return base_type::lookup(p.m_base, BOOST_JOIN(kind, _bundle_t)());} \ + template \ + static typename lazy_enable_if_c<(base_type::found && (is_same::value)), \ + add_reference >::type \ + lookup(property& p, BundleTag) {return base_type::lookup(p.m_base, BOOST_JOIN(kind, _bundle_t)());} \ + template \ + static typename lazy_enable_if_c<(base_type::found && (is_same::value)), \ + add_reference >::type \ + lookup(const property& p, BundleTag) {return base_type::lookup(p.m_base, BOOST_JOIN(kind, _bundle_t)());} \ }; \ BGL_DO_ONE_BUNDLE_TYPE(vertex) @@ -122,12 +129,14 @@ namespace boost { typedef lookup_one_property_internal base_type; public: template - static typename enable_if >, typename base_type::type&>::type + static typename lazy_enable_if >, + add_reference >::type lookup(PL& prop, const PropName& tag) { return base_type::lookup(prop.m_base, tag); } template - static typename enable_if >, const typename base_type::type&>::type + static typename lazy_enable_if >, + add_reference >::type lookup(const PL& prop, const PropName& tag) { return base_type::lookup(prop.m_base, tag); } @@ -135,12 +144,12 @@ namespace boost { // Pointer-to-member access to bundled properties #ifndef BOOST_GRAPH_NO_BUNDLED_PROPERTIES - template - struct lookup_one_property_internal { + template + struct lookup_one_property_internal >::type> { BOOST_STATIC_CONSTANT(bool, found = true); typedef R type; - static R& lookup(T& x, R T::*ptr) {return x.*ptr;} - static const R& lookup(const T& x, R T::*ptr) {return x.*ptr;} + static R& lookup(T& x, R TMaybeBase::*ptr) {return x.*ptr;} + static const R& lookup(const T& x, R TMaybeBase::*ptr) {return x.*ptr;} }; #endif @@ -153,7 +162,8 @@ namespace boost { BOOST_STATIC_CONSTANT(bool, found = (lookup_one_property_internal::found)); typedef const typename lookup_one_property_internal::type type; template - static typename enable_if, const typename lookup_one_property_internal::type&>::type + static typename lazy_enable_if, + add_reference::type> >::type lookup(const U& p, Tag tag) { return lookup_one_property_internal::lookup(p, tag); } @@ -199,58 +209,6 @@ namespace boost { : mpl::bool_::value> { }; - /** @internal @name Retag Property List - * This metafunction is used internally to normalize a property if it is - * actually modeling a property. Specifically this is used in Boost.Graph - * to map user-provided classes into bundled properties. - */ - //@{ - // One base case of the recursive form (see below). This matches any - // retag request that does not include a property<...> or no_property as - // the FinalType. This is used for generating bundles in Boost.Graph. - template - struct retag_property_list - { - typedef property type; - typedef FinalType retagged; - }; - - // Recursively retag the nested property list. - template - struct retag_property_list > - { - private: - typedef retag_property_list next; - - public: - typedef property type; - typedef typename next::retagged retagged; - }; - - // This base case will correctly deduce the final property type if the - // retagged property is given in property form. This should not hide - // the base case below. - // NOTE: This addresses a problem of layering bundled properties in the BGL - // where multiple retaggings will fail to deduce the correct retagged - // type. - template - struct retag_property_list > - { - public: - typedef property type; - typedef FinalType retagged; - }; - - // A final base case of the retag_property_list, this will terminate a - // properly structured list. - template - struct retag_property_list - { - typedef no_property type; - typedef no_property retagged; - }; - //@} - template class lookup_one_property_f; diff --git a/3party/boost/boost/phoenix/bind/detail/member_function_ptr.hpp b/3party/boost/boost/phoenix/bind/detail/member_function_ptr.hpp index 453e1b40e3..aa40d13606 100644 --- a/3party/boost/boost/phoenix/bind/detail/member_function_ptr.hpp +++ b/3party/boost/boost/phoenix/bind/detail/member_function_ptr.hpp @@ -61,7 +61,7 @@ namespace boost { namespace phoenix { namespace detail { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj) ->*fp)(); } @@ -132,7 +132,7 @@ namespace boost { namespace phoenix { namespace detail { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(BOOST_PHOENIX_a); } diff --git a/3party/boost/boost/phoenix/bind/detail/member_variable.hpp b/3party/boost/boost/phoenix/bind/detail/member_variable.hpp index cac2f3782e..29e2ab6768 100644 --- a/3party/boost/boost/phoenix/bind/detail/member_variable.hpp +++ b/3party/boost/boost/phoenix/bind/detail/member_variable.hpp @@ -10,6 +10,11 @@ #include #include +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored +#endif + namespace boost { namespace phoenix { namespace detail { template @@ -46,7 +51,7 @@ namespace boost { namespace phoenix { namespace detail { { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*mp); } @@ -55,7 +60,7 @@ namespace boost { namespace phoenix { namespace detail { { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*mp); } @@ -75,4 +80,8 @@ namespace boost { namespace phoenix { namespace detail { }; }}} +#ifdef _MSC_VER +#pragma warning(pop) +#endif + #endif diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_10.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_10.hpp index f3b4c936af..9b620f21b8 100644 --- a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_10.hpp +++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_10.hpp @@ -24,7 +24,7 @@ RT operator()(Class& obj, A0 & a0) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0); } template @@ -55,7 +55,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1); } template @@ -86,7 +86,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2); } template @@ -117,7 +117,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3); } template @@ -148,7 +148,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4); } template @@ -179,7 +179,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5); } template @@ -210,7 +210,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template @@ -241,7 +241,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template @@ -272,7 +272,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template @@ -303,7 +303,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_20.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_20.hpp index de86b7f5c0..e0894fea82 100644 --- a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_20.hpp +++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_20.hpp @@ -24,7 +24,7 @@ RT operator()(Class& obj, A0 & a0) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0); } template @@ -55,7 +55,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1); } template @@ -86,7 +86,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2); } template @@ -117,7 +117,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3); } template @@ -148,7 +148,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4); } template @@ -179,7 +179,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5); } template @@ -210,7 +210,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template @@ -241,7 +241,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template @@ -272,7 +272,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template @@ -303,7 +303,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template @@ -334,7 +334,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template @@ -365,7 +365,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template @@ -396,7 +396,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template @@ -427,7 +427,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template @@ -458,7 +458,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template @@ -489,7 +489,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template @@ -520,7 +520,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template @@ -551,7 +551,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } template @@ -582,7 +582,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18); } template @@ -613,7 +613,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19); } template diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_30.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_30.hpp index ec408f67c9..513146d880 100644 --- a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_30.hpp +++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_30.hpp @@ -24,7 +24,7 @@ RT operator()(Class& obj, A0 & a0) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0); } template @@ -55,7 +55,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1); } template @@ -86,7 +86,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2); } template @@ -117,7 +117,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3); } template @@ -148,7 +148,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4); } template @@ -179,7 +179,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5); } template @@ -210,7 +210,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template @@ -241,7 +241,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template @@ -272,7 +272,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template @@ -303,7 +303,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template @@ -334,7 +334,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template @@ -365,7 +365,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template @@ -396,7 +396,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template @@ -427,7 +427,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template @@ -458,7 +458,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template @@ -489,7 +489,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template @@ -520,7 +520,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template @@ -551,7 +551,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } template @@ -582,7 +582,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18); } template @@ -613,7 +613,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19); } template @@ -644,7 +644,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20); } template @@ -675,7 +675,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21); } template @@ -706,7 +706,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22); } template @@ -737,7 +737,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23); } template @@ -768,7 +768,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24); } template @@ -799,7 +799,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25); } template @@ -830,7 +830,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26); } template @@ -861,7 +861,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27); } template @@ -892,7 +892,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28); } template @@ -923,7 +923,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29); } template diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_40.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_40.hpp index 0bb0194213..dcf894f5e9 100644 --- a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_40.hpp +++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_40.hpp @@ -24,7 +24,7 @@ RT operator()(Class& obj, A0 & a0) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0); } template @@ -55,7 +55,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1); } template @@ -86,7 +86,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2); } template @@ -117,7 +117,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3); } template @@ -148,7 +148,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4); } template @@ -179,7 +179,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5); } template @@ -210,7 +210,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template @@ -241,7 +241,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template @@ -272,7 +272,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template @@ -303,7 +303,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template @@ -334,7 +334,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template @@ -365,7 +365,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template @@ -396,7 +396,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template @@ -427,7 +427,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template @@ -458,7 +458,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template @@ -489,7 +489,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template @@ -520,7 +520,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template @@ -551,7 +551,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } template @@ -582,7 +582,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18); } template @@ -613,7 +613,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19); } template @@ -644,7 +644,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20); } template @@ -675,7 +675,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21); } template @@ -706,7 +706,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22); } template @@ -737,7 +737,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23); } template @@ -768,7 +768,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24); } template @@ -799,7 +799,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25); } template @@ -830,7 +830,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26); } template @@ -861,7 +861,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27); } template @@ -892,7 +892,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28); } template @@ -923,7 +923,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29); } template @@ -954,7 +954,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30); } template @@ -985,7 +985,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31); } template @@ -1016,7 +1016,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32); } template @@ -1047,7 +1047,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33); } template @@ -1078,7 +1078,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34); } template @@ -1109,7 +1109,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35); } template @@ -1140,7 +1140,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36); } template @@ -1171,7 +1171,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37); } template @@ -1202,7 +1202,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38); } template @@ -1233,7 +1233,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39); } template diff --git a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_50.hpp b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_50.hpp index 1925e23292..634badef36 100644 --- a/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_50.hpp +++ b/3party/boost/boost/phoenix/bind/detail/preprocessed/member_function_ptr_50.hpp @@ -24,7 +24,7 @@ RT operator()(Class& obj, A0 & a0) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0); } template @@ -55,7 +55,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1); } template @@ -86,7 +86,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2); } template @@ -117,7 +117,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3); } template @@ -148,7 +148,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4); } template @@ -179,7 +179,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5); } template @@ -210,7 +210,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6); } template @@ -241,7 +241,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7); } template @@ -272,7 +272,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8); } template @@ -303,7 +303,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9); } template @@ -334,7 +334,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10); } template @@ -365,7 +365,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11); } template @@ -396,7 +396,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12); } template @@ -427,7 +427,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13); } template @@ -458,7 +458,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14); } template @@ -489,7 +489,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15); } template @@ -520,7 +520,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16); } template @@ -551,7 +551,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17); } template @@ -582,7 +582,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18); } template @@ -613,7 +613,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19); } template @@ -644,7 +644,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20); } template @@ -675,7 +675,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21); } template @@ -706,7 +706,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22); } template @@ -737,7 +737,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23); } template @@ -768,7 +768,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24); } template @@ -799,7 +799,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25); } template @@ -830,7 +830,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26); } template @@ -861,7 +861,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27); } template @@ -892,7 +892,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28); } template @@ -923,7 +923,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29); } template @@ -954,7 +954,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30); } template @@ -985,7 +985,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31); } template @@ -1016,7 +1016,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32); } template @@ -1047,7 +1047,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33); } template @@ -1078,7 +1078,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34); } template @@ -1109,7 +1109,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35); } template @@ -1140,7 +1140,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36); } template @@ -1171,7 +1171,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37); } template @@ -1202,7 +1202,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38); } template @@ -1233,7 +1233,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39); } template @@ -1264,7 +1264,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40); } template @@ -1295,7 +1295,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41); } template @@ -1326,7 +1326,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42); } template @@ -1357,7 +1357,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42 , A43 & a43) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42 , a43); } template @@ -1388,7 +1388,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42 , A43 & a43 , A44 & a44) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42 , a43 , a44); } template @@ -1419,7 +1419,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42 , A43 & a43 , A44 & a44 , A45 & a45) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42 , a43 , a44 , a45); } template @@ -1450,7 +1450,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42 , A43 & a43 , A44 & a44 , A45 & a45 , A46 & a46) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42 , a43 , a44 , a45 , a46); } template @@ -1481,7 +1481,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42 , A43 & a43 , A44 & a44 , A45 & a45 , A46 & a46 , A47 & a47) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42 , a43 , a44 , a45 , a46 , a47); } template @@ -1512,7 +1512,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42 , A43 & a43 , A44 & a44 , A45 & a45 , A46 & a46 , A47 & a47 , A48 & a48) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42 , a43 , a44 , a45 , a46 , a47 , a48); } template @@ -1543,7 +1543,7 @@ RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9 , A10 & a10 , A11 & a11 , A12 & a12 , A13 & a13 , A14 & a14 , A15 & a15 , A16 & a16 , A17 & a17 , A18 & a18 , A19 & a19 , A20 & a20 , A21 & a21 , A22 & a22 , A23 & a23 , A24 & a24 , A25 & a25 , A26 & a26 , A27 & a27 , A28 & a28 , A29 & a29 , A30 & a30 , A31 & a31 , A32 & a32 , A33 & a33 , A34 & a34 , A35 & a35 , A36 & a36 , A37 & a37 , A38 & a38 , A39 & a39 , A40 & a40 , A41 & a41 , A42 & a42 , A43 & a43 , A44 & a44 , A45 & a45 , A46 & a46 , A47 & a47 , A48 & a48 , A49 & a49) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename proto::detail::classtypeof::type class_type; + typedef typename proto::detail::class_member_traits::class_type class_type; return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 , a11 , a12 , a13 , a14 , a15 , a16 , a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27 , a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 , a39 , a40 , a41 , a42 , a43 , a44 , a45 , a46 , a47 , a48 , a49); } template diff --git a/3party/boost/boost/phoenix/core/actor.hpp b/3party/boost/boost/phoenix/core/actor.hpp index ec43641a3b..f2b47de8cd 100644 --- a/3party/boost/boost/phoenix/core/actor.hpp +++ b/3party/boost/boost/phoenix/core/actor.hpp @@ -261,7 +261,7 @@ namespace boost { namespace phoenix Env const & , default_actions const & >::type - , int + , proto::empty_env >::result_type eval(Env const & env) const { diff --git a/3party/boost/boost/phoenix/core/arity.hpp b/3party/boost/boost/phoenix/core/arity.hpp index a71143c75a..fa683b1bc9 100644 --- a/3party/boost/boost/phoenix/core/arity.hpp +++ b/3party/boost/boost/phoenix/core/arity.hpp @@ -39,7 +39,7 @@ namespace boost { namespace phoenix mpl::int_<0> , boost::phoenix::arity >& - , int + , proto::empty_env >::result_type::value > {}; diff --git a/3party/boost/boost/phoenix/core/detail/actor_result_of.hpp b/3party/boost/boost/phoenix/core/detail/actor_result_of.hpp index 972709ef17..3766c09da3 100644 --- a/3party/boost/boost/phoenix/core/detail/actor_result_of.hpp +++ b/3party/boost/boost/phoenix/core/detail/actor_result_of.hpp @@ -50,7 +50,7 @@ vector1 *> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -97,7 +97,7 @@ ) *, BOOST_PHOENIX_A> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; diff --git a/3party/boost/boost/phoenix/core/detail/function_eval.hpp b/3party/boost/boost/phoenix/core/detail/function_eval.hpp index 8fde0dfaa5..6ffea2b4a4 100644 --- a/3party/boost/boost/phoenix/core/detail/function_eval.hpp +++ b/3party/boost/boost/phoenix/core/detail/function_eval.hpp @@ -99,11 +99,15 @@ namespace boost { namespace phoenix { #define PHOENIX_GET_ARG(z, n, data) \ typedef \ - typename boost::result_of< \ - boost::phoenix::evaluator( \ - BOOST_PP_CAT(A, n) \ - , Context \ - ) \ + typename boost::add_reference< \ + typename boost::add_const< \ + typename boost::result_of< \ + boost::phoenix::evaluator( \ + BOOST_PP_CAT(A, n) \ + , Context \ + ) \ + >::type \ + >::type \ >::type \ BOOST_PP_CAT(a, n); diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_10.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_10.hpp index 32d0b798de..8f0a162f0d 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_10.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_10.hpp @@ -21,7 +21,7 @@ vector1 *> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -55,7 +55,7 @@ vector2 *, A0> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -77,7 +77,7 @@ vector3 *, A0 , A1> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -99,7 +99,7 @@ vector4 *, A0 , A1 , A2> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -121,7 +121,7 @@ vector5 *, A0 , A1 , A2 , A3> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -143,7 +143,7 @@ vector6 *, A0 , A1 , A2 , A3 , A4> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -165,7 +165,7 @@ vector7 *, A0 , A1 , A2 , A3 , A4 , A5> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -187,7 +187,7 @@ vector8 *, A0 , A1 , A2 , A3 , A4 , A5 , A6> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -209,7 +209,7 @@ vector9 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -231,7 +231,7 @@ vector10 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -253,7 +253,7 @@ vector11 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_20.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_20.hpp index 37c5c862b2..881bbc35e5 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_20.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_20.hpp @@ -21,7 +21,7 @@ vector1 *> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -55,7 +55,7 @@ vector2 *, A0> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -77,7 +77,7 @@ vector3 *, A0 , A1> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -99,7 +99,7 @@ vector4 *, A0 , A1 , A2> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -121,7 +121,7 @@ vector5 *, A0 , A1 , A2 , A3> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -143,7 +143,7 @@ vector6 *, A0 , A1 , A2 , A3 , A4> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -165,7 +165,7 @@ vector7 *, A0 , A1 , A2 , A3 , A4 , A5> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -187,7 +187,7 @@ vector8 *, A0 , A1 , A2 , A3 , A4 , A5 , A6> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -209,7 +209,7 @@ vector9 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -231,7 +231,7 @@ vector10 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -253,7 +253,7 @@ vector11 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -275,7 +275,7 @@ vector12 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -297,7 +297,7 @@ vector13 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -319,7 +319,7 @@ vector14 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -341,7 +341,7 @@ vector15 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -363,7 +363,7 @@ vector16 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -385,7 +385,7 @@ vector17 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -407,7 +407,7 @@ vector18 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -429,7 +429,7 @@ vector19 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -451,7 +451,7 @@ vector20 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -473,7 +473,7 @@ vector21 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_30.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_30.hpp index a3418a9732..15018be12c 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_30.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_30.hpp @@ -21,7 +21,7 @@ vector1 *> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -55,7 +55,7 @@ vector2 *, A0> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -77,7 +77,7 @@ vector3 *, A0 , A1> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -99,7 +99,7 @@ vector4 *, A0 , A1 , A2> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -121,7 +121,7 @@ vector5 *, A0 , A1 , A2 , A3> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -143,7 +143,7 @@ vector6 *, A0 , A1 , A2 , A3 , A4> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -165,7 +165,7 @@ vector7 *, A0 , A1 , A2 , A3 , A4 , A5> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -187,7 +187,7 @@ vector8 *, A0 , A1 , A2 , A3 , A4 , A5 , A6> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -209,7 +209,7 @@ vector9 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -231,7 +231,7 @@ vector10 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -253,7 +253,7 @@ vector11 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -275,7 +275,7 @@ vector12 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -297,7 +297,7 @@ vector13 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -319,7 +319,7 @@ vector14 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -341,7 +341,7 @@ vector15 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -363,7 +363,7 @@ vector16 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -385,7 +385,7 @@ vector17 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -407,7 +407,7 @@ vector18 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -429,7 +429,7 @@ vector19 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -451,7 +451,7 @@ vector20 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -473,7 +473,7 @@ vector21 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -495,7 +495,7 @@ vector22 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -517,7 +517,7 @@ vector23 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -539,7 +539,7 @@ vector24 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -561,7 +561,7 @@ vector25 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -583,7 +583,7 @@ vector26 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -605,7 +605,7 @@ vector27 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -627,7 +627,7 @@ vector28 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -649,7 +649,7 @@ vector29 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -671,7 +671,7 @@ vector30 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -693,7 +693,7 @@ vector31 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_40.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_40.hpp index a1e88d67d7..cfe57a7f5f 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_40.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_40.hpp @@ -21,7 +21,7 @@ vector1 *> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -55,7 +55,7 @@ vector2 *, A0> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -77,7 +77,7 @@ vector3 *, A0 , A1> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -99,7 +99,7 @@ vector4 *, A0 , A1 , A2> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -121,7 +121,7 @@ vector5 *, A0 , A1 , A2 , A3> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -143,7 +143,7 @@ vector6 *, A0 , A1 , A2 , A3 , A4> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -165,7 +165,7 @@ vector7 *, A0 , A1 , A2 , A3 , A4 , A5> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -187,7 +187,7 @@ vector8 *, A0 , A1 , A2 , A3 , A4 , A5 , A6> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -209,7 +209,7 @@ vector9 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -231,7 +231,7 @@ vector10 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -253,7 +253,7 @@ vector11 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -275,7 +275,7 @@ vector12 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -297,7 +297,7 @@ vector13 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -319,7 +319,7 @@ vector14 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -341,7 +341,7 @@ vector15 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -363,7 +363,7 @@ vector16 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -385,7 +385,7 @@ vector17 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -407,7 +407,7 @@ vector18 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -429,7 +429,7 @@ vector19 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -451,7 +451,7 @@ vector20 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -473,7 +473,7 @@ vector21 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -495,7 +495,7 @@ vector22 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -517,7 +517,7 @@ vector23 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -539,7 +539,7 @@ vector24 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -561,7 +561,7 @@ vector25 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -583,7 +583,7 @@ vector26 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -605,7 +605,7 @@ vector27 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -627,7 +627,7 @@ vector28 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -649,7 +649,7 @@ vector29 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -671,7 +671,7 @@ vector30 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -693,7 +693,7 @@ vector31 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -715,7 +715,7 @@ vector32 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -737,7 +737,7 @@ vector33 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -759,7 +759,7 @@ vector34 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -781,7 +781,7 @@ vector35 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -803,7 +803,7 @@ vector36 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -825,7 +825,7 @@ vector37 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -847,7 +847,7 @@ vector38 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -869,7 +869,7 @@ vector39 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -891,7 +891,7 @@ vector40 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -913,7 +913,7 @@ vector41 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_50.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_50.hpp index 2068eb5fc6..ad9830b023 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_50.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/actor_result_of_50.hpp @@ -21,7 +21,7 @@ vector1 *> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -55,7 +55,7 @@ vector2 *, A0> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -77,7 +77,7 @@ vector3 *, A0 , A1> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -99,7 +99,7 @@ vector4 *, A0 , A1 , A2> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -121,7 +121,7 @@ vector5 *, A0 , A1 , A2 , A3> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -143,7 +143,7 @@ vector6 *, A0 , A1 , A2 , A3 , A4> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -165,7 +165,7 @@ vector7 *, A0 , A1 , A2 , A3 , A4 , A5> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -187,7 +187,7 @@ vector8 *, A0 , A1 , A2 , A3 , A4 , A5 , A6> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -209,7 +209,7 @@ vector9 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -231,7 +231,7 @@ vector10 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -253,7 +253,7 @@ vector11 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -275,7 +275,7 @@ vector12 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -297,7 +297,7 @@ vector13 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -319,7 +319,7 @@ vector14 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -341,7 +341,7 @@ vector15 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -363,7 +363,7 @@ vector16 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -385,7 +385,7 @@ vector17 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -407,7 +407,7 @@ vector18 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -429,7 +429,7 @@ vector19 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -451,7 +451,7 @@ vector20 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -473,7 +473,7 @@ vector21 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -495,7 +495,7 @@ vector22 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -517,7 +517,7 @@ vector23 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -539,7 +539,7 @@ vector24 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -561,7 +561,7 @@ vector25 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -583,7 +583,7 @@ vector26 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -605,7 +605,7 @@ vector27 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -627,7 +627,7 @@ vector28 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -649,7 +649,7 @@ vector29 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -671,7 +671,7 @@ vector30 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -693,7 +693,7 @@ vector31 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -715,7 +715,7 @@ vector32 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -737,7 +737,7 @@ vector33 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -759,7 +759,7 @@ vector34 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -781,7 +781,7 @@ vector35 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -803,7 +803,7 @@ vector36 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -825,7 +825,7 @@ vector37 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -847,7 +847,7 @@ vector38 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -869,7 +869,7 @@ vector39 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -891,7 +891,7 @@ vector40 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -913,7 +913,7 @@ vector41 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -935,7 +935,7 @@ vector42 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -957,7 +957,7 @@ vector43 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -979,7 +979,7 @@ vector44 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -1001,7 +1001,7 @@ vector45 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42 , A43> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -1023,7 +1023,7 @@ vector46 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42 , A43 , A44> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -1045,7 +1045,7 @@ vector47 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42 , A43 , A44 , A45> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -1067,7 +1067,7 @@ vector48 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42 , A43 , A44 , A45 , A46> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -1089,7 +1089,7 @@ vector49 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42 , A43 , A44 , A45 , A46 , A47> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -1111,7 +1111,7 @@ vector50 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42 , A43 , A44 , A45 , A46 , A47 , A48> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; @@ -1133,7 +1133,7 @@ vector51 *, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19 , A20 , A21 , A22 , A23 , A24 , A25 , A26 , A27 , A28 , A29 , A30 , A31 , A32 , A33 , A34 , A35 , A36 , A37 , A38 , A39 , A40 , A41 , A42 , A43 , A44 , A45 , A46 , A47 , A48 , A49> & , default_actions > const & - , int + , proto::empty_env >::result_type type; }; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_10.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_10.hpp index 6c235cefab..ce8a073cca 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_10.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_10.hpp @@ -66,7 +66,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::result_of::type type; @@ -116,7 +116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::result_of::type type; @@ -166,7 +166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::result_of::type type; @@ -216,7 +216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::result_of::type type; @@ -266,7 +266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::result_of::type type; @@ -316,7 +316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::result_of::type type; @@ -366,7 +366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::result_of::type type; @@ -416,7 +416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::result_of::type type; @@ -466,7 +466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::result_of::type type; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_20.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_20.hpp index 6bee5c7e95..c2d10bb87a 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_20.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_20.hpp @@ -66,7 +66,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::result_of::type type; @@ -116,7 +116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::result_of::type type; @@ -166,7 +166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::result_of::type type; @@ -216,7 +216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::result_of::type type; @@ -266,7 +266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::result_of::type type; @@ -316,7 +316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::result_of::type type; @@ -366,7 +366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::result_of::type type; @@ -416,7 +416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::result_of::type type; @@ -466,7 +466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::result_of::type type; @@ -516,7 +516,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::result_of::type type; @@ -566,7 +566,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::result_of::type type; @@ -616,7 +616,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::result_of::type type; @@ -666,7 +666,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::result_of::type type; @@ -716,7 +716,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::result_of::type type; @@ -766,7 +766,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::result_of::type type; @@ -816,7 +816,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::result_of::type type; @@ -866,7 +866,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::result_of::type type; @@ -916,7 +916,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::result_of::type type; @@ -966,7 +966,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::result_of::type type; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_30.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_30.hpp index 85cedeeb06..352bf57c23 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_30.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_30.hpp @@ -66,7 +66,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::result_of::type type; @@ -116,7 +116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::result_of::type type; @@ -166,7 +166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::result_of::type type; @@ -216,7 +216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::result_of::type type; @@ -266,7 +266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::result_of::type type; @@ -316,7 +316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::result_of::type type; @@ -366,7 +366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::result_of::type type; @@ -416,7 +416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::result_of::type type; @@ -466,7 +466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::result_of::type type; @@ -516,7 +516,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::result_of::type type; @@ -566,7 +566,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::result_of::type type; @@ -616,7 +616,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::result_of::type type; @@ -666,7 +666,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::result_of::type type; @@ -716,7 +716,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::result_of::type type; @@ -766,7 +766,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::result_of::type type; @@ -816,7 +816,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::result_of::type type; @@ -866,7 +866,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::result_of::type type; @@ -916,7 +916,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::result_of::type type; @@ -966,7 +966,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::result_of::type type; @@ -1016,7 +1016,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::result_of::type type; @@ -1066,7 +1066,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::result_of::type type; @@ -1116,7 +1116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::result_of::type type; @@ -1166,7 +1166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::result_of::type type; @@ -1216,7 +1216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::result_of::type type; @@ -1266,7 +1266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::result_of::type type; @@ -1316,7 +1316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::result_of::type type; @@ -1366,7 +1366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::result_of::type type; @@ -1416,7 +1416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::result_of::type type; @@ -1466,7 +1466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::result_of::type type; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_40.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_40.hpp index 7ef177212f..186d149e04 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_40.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_40.hpp @@ -66,7 +66,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::result_of::type type; @@ -116,7 +116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::result_of::type type; @@ -166,7 +166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::result_of::type type; @@ -216,7 +216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::result_of::type type; @@ -266,7 +266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::result_of::type type; @@ -316,7 +316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::result_of::type type; @@ -366,7 +366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::result_of::type type; @@ -416,7 +416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::result_of::type type; @@ -466,7 +466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::result_of::type type; @@ -516,7 +516,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::result_of::type type; @@ -566,7 +566,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::result_of::type type; @@ -616,7 +616,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::result_of::type type; @@ -666,7 +666,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::result_of::type type; @@ -716,7 +716,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::result_of::type type; @@ -766,7 +766,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::result_of::type type; @@ -816,7 +816,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::result_of::type type; @@ -866,7 +866,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::result_of::type type; @@ -916,7 +916,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::result_of::type type; @@ -966,7 +966,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::result_of::type type; @@ -1016,7 +1016,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::result_of::type type; @@ -1066,7 +1066,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::result_of::type type; @@ -1116,7 +1116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::result_of::type type; @@ -1166,7 +1166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::result_of::type type; @@ -1216,7 +1216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::result_of::type type; @@ -1266,7 +1266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::result_of::type type; @@ -1316,7 +1316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::result_of::type type; @@ -1366,7 +1366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::result_of::type type; @@ -1416,7 +1416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::result_of::type type; @@ -1466,7 +1466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::result_of::type type; @@ -1516,7 +1516,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::result_of::type type; @@ -1566,7 +1566,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::result_of::type type; @@ -1616,7 +1616,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::result_of::type type; @@ -1666,7 +1666,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::result_of::type type; @@ -1716,7 +1716,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::result_of::type type; @@ -1766,7 +1766,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::result_of::type type; @@ -1816,7 +1816,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::result_of::type type; @@ -1866,7 +1866,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::result_of::type type; @@ -1916,7 +1916,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::result_of::type type; @@ -1966,7 +1966,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::result_of::type type; diff --git a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_50.hpp b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_50.hpp index 0f2af90595..b0bfcdd2e6 100644 --- a/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_50.hpp +++ b/3party/boost/boost/phoenix/core/detail/preprocessed/function_eval_50.hpp @@ -66,7 +66,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::result_of::type type; @@ -116,7 +116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::result_of::type type; @@ -166,7 +166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::result_of::type type; @@ -216,7 +216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::result_of::type type; @@ -266,7 +266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::result_of::type type; @@ -316,7 +316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::result_of::type type; @@ -366,7 +366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::result_of::type type; @@ -416,7 +416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::result_of::type type; @@ -466,7 +466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::result_of::type type; @@ -516,7 +516,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::result_of::type type; @@ -566,7 +566,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::result_of::type type; @@ -616,7 +616,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::result_of::type type; @@ -666,7 +666,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::result_of::type type; @@ -716,7 +716,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::result_of::type type; @@ -766,7 +766,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::result_of::type type; @@ -816,7 +816,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::result_of::type type; @@ -866,7 +866,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::result_of::type type; @@ -916,7 +916,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::result_of::type type; @@ -966,7 +966,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::result_of::type type; @@ -1016,7 +1016,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::result_of::type type; @@ -1066,7 +1066,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::result_of::type type; @@ -1116,7 +1116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::result_of::type type; @@ -1166,7 +1166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::result_of::type type; @@ -1216,7 +1216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::result_of::type type; @@ -1266,7 +1266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::result_of::type type; @@ -1316,7 +1316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::result_of::type type; @@ -1366,7 +1366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::result_of::type type; @@ -1416,7 +1416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::result_of::type type; @@ -1466,7 +1466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::result_of::type type; @@ -1516,7 +1516,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::result_of::type type; @@ -1566,7 +1566,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::result_of::type type; @@ -1616,7 +1616,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::result_of::type type; @@ -1666,7 +1666,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::result_of::type type; @@ -1716,7 +1716,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::result_of::type type; @@ -1766,7 +1766,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::result_of::type type; @@ -1816,7 +1816,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::result_of::type type; @@ -1866,7 +1866,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::result_of::type type; @@ -1916,7 +1916,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::result_of::type type; @@ -1966,7 +1966,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::result_of::type type; @@ -2016,7 +2016,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::result_of::type type; @@ -2066,7 +2066,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::result_of::type type; @@ -2116,7 +2116,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::result_of::type type; @@ -2166,7 +2166,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; typedef typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type a42; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type >::type >::type a42; typedef typename boost::result_of::type type; @@ -2216,7 +2216,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; typedef typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type a42; typedef typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type a43; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type >::type >::type a42; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type >::type >::type a43; typedef typename boost::result_of::type type; @@ -2266,7 +2266,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; typedef typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type a42; typedef typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type a43; typedef typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type a44; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type >::type >::type a42; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type >::type >::type a43; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type >::type >::type a44; typedef typename boost::result_of::type type; @@ -2316,7 +2316,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; typedef typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type a42; typedef typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type a43; typedef typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type a44; typedef typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type a45; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type >::type >::type a42; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type >::type >::type a43; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type >::type >::type a44; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type >::type >::type a45; typedef typename boost::result_of::type type; @@ -2366,7 +2366,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; typedef typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type a42; typedef typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type a43; typedef typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type a44; typedef typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type a45; typedef typename boost::result_of< boost::phoenix::evaluator( A46 , Context ) >::type a46; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type >::type >::type a42; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type >::type >::type a43; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type >::type >::type a44; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type >::type >::type a45; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A46 , Context ) >::type >::type >::type a46; typedef typename boost::result_of::type type; @@ -2416,7 +2416,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; typedef typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type a42; typedef typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type a43; typedef typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type a44; typedef typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type a45; typedef typename boost::result_of< boost::phoenix::evaluator( A46 , Context ) >::type a46; typedef typename boost::result_of< boost::phoenix::evaluator( A47 , Context ) >::type a47; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type >::type >::type a42; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type >::type >::type a43; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type >::type >::type a44; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type >::type >::type a45; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A46 , Context ) >::type >::type >::type a46; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A47 , Context ) >::type >::type >::type a47; typedef typename boost::result_of::type type; @@ -2466,7 +2466,7 @@ namespace boost { namespace phoenix { typename boost::result_of::type >::type fn; - typedef typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type a0; typedef typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type a1; typedef typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type a2; typedef typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type a3; typedef typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type a4; typedef typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type a5; typedef typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type a6; typedef typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type a7; typedef typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type a8; typedef typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type a9; typedef typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type a10; typedef typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type a11; typedef typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type a12; typedef typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type a13; typedef typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type a14; typedef typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type a15; typedef typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type a16; typedef typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type a17; typedef typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type a18; typedef typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type a19; typedef typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type a20; typedef typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type a21; typedef typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type a22; typedef typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type a23; typedef typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type a24; typedef typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type a25; typedef typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type a26; typedef typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type a27; typedef typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type a28; typedef typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type a29; typedef typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type a30; typedef typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type a31; typedef typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type a32; typedef typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type a33; typedef typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type a34; typedef typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type a35; typedef typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type a36; typedef typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type a37; typedef typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type a38; typedef typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type a39; typedef typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type a40; typedef typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type a41; typedef typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type a42; typedef typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type a43; typedef typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type a44; typedef typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type a45; typedef typename boost::result_of< boost::phoenix::evaluator( A46 , Context ) >::type a46; typedef typename boost::result_of< boost::phoenix::evaluator( A47 , Context ) >::type a47; typedef typename boost::result_of< boost::phoenix::evaluator( A48 , Context ) >::type a48; + typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A0 , Context ) >::type >::type >::type a0; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A1 , Context ) >::type >::type >::type a1; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A2 , Context ) >::type >::type >::type a2; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A3 , Context ) >::type >::type >::type a3; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A4 , Context ) >::type >::type >::type a4; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A5 , Context ) >::type >::type >::type a5; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A6 , Context ) >::type >::type >::type a6; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A7 , Context ) >::type >::type >::type a7; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A8 , Context ) >::type >::type >::type a8; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A9 , Context ) >::type >::type >::type a9; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A10 , Context ) >::type >::type >::type a10; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A11 , Context ) >::type >::type >::type a11; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A12 , Context ) >::type >::type >::type a12; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A13 , Context ) >::type >::type >::type a13; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A14 , Context ) >::type >::type >::type a14; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A15 , Context ) >::type >::type >::type a15; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A16 , Context ) >::type >::type >::type a16; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A17 , Context ) >::type >::type >::type a17; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A18 , Context ) >::type >::type >::type a18; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A19 , Context ) >::type >::type >::type a19; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A20 , Context ) >::type >::type >::type a20; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A21 , Context ) >::type >::type >::type a21; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A22 , Context ) >::type >::type >::type a22; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A23 , Context ) >::type >::type >::type a23; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A24 , Context ) >::type >::type >::type a24; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A25 , Context ) >::type >::type >::type a25; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A26 , Context ) >::type >::type >::type a26; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A27 , Context ) >::type >::type >::type a27; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A28 , Context ) >::type >::type >::type a28; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A29 , Context ) >::type >::type >::type a29; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A30 , Context ) >::type >::type >::type a30; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A31 , Context ) >::type >::type >::type a31; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A32 , Context ) >::type >::type >::type a32; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A33 , Context ) >::type >::type >::type a33; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A34 , Context ) >::type >::type >::type a34; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A35 , Context ) >::type >::type >::type a35; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A36 , Context ) >::type >::type >::type a36; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A37 , Context ) >::type >::type >::type a37; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A38 , Context ) >::type >::type >::type a38; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A39 , Context ) >::type >::type >::type a39; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A40 , Context ) >::type >::type >::type a40; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A41 , Context ) >::type >::type >::type a41; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A42 , Context ) >::type >::type >::type a42; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A43 , Context ) >::type >::type >::type a43; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A44 , Context ) >::type >::type >::type a44; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A45 , Context ) >::type >::type >::type a45; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A46 , Context ) >::type >::type >::type a46; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A47 , Context ) >::type >::type >::type a47; typedef typename boost::add_reference< typename boost::add_const< typename boost::result_of< boost::phoenix::evaluator( A48 , Context ) >::type >::type >::type a48; typedef typename boost::result_of::type type; diff --git a/3party/boost/boost/phoenix/core/domain.hpp b/3party/boost/boost/phoenix/core/domain.hpp index ec11090916..2ee5359c60 100644 --- a/3party/boost/boost/phoenix/core/domain.hpp +++ b/3party/boost/boost/phoenix/core/domain.hpp @@ -9,6 +9,9 @@ #define BOOST_PHOENIX_CORE_DOMAIN_HPP #include +#include +#include +#include #include namespace boost { namespace phoenix @@ -17,10 +20,19 @@ namespace boost { namespace phoenix struct actor; struct meta_grammar; - + + struct phoenix_generator + : proto::switch_ + { + template + struct case_ + : proto::otherwise(proto::_)> > + {}; + }; + struct phoenix_domain : proto::domain< - proto::pod_generator + phoenix_generator , meta_grammar , proto::basic_default_domain > diff --git a/3party/boost/boost/phoenix/core/environment.hpp b/3party/boost/boost/phoenix/core/environment.hpp index e84dc77081..f72e5d9a58 100644 --- a/3party/boost/boost/phoenix/core/environment.hpp +++ b/3party/boost/boost/phoenix/core/environment.hpp @@ -292,8 +292,8 @@ namespace boost { namespace phoenix }; template - struct _env::impl - : proto::transform_impl + struct _env::impl + : proto::transform_impl { typedef typename fusion::result_of::at_c< @@ -314,7 +314,7 @@ namespace boost { namespace phoenix template struct _env::impl - : _env::impl + : _env::impl {}; template @@ -352,8 +352,8 @@ namespace boost { namespace phoenix }; template - struct _actions::impl - : proto::transform_impl + struct _actions::impl + : proto::transform_impl { typedef typename fusion::result_of::at_c< @@ -374,7 +374,7 @@ namespace boost { namespace phoenix template struct _actions::impl - : _actions::impl + : _actions::impl {}; template diff --git a/3party/boost/boost/phoenix/core/expression.hpp b/3party/boost/boost/phoenix/core/expression.hpp index a2118081ad..2db9eec482 100644 --- a/3party/boost/boost/phoenix/core/expression.hpp +++ b/3party/boost/boost/phoenix/core/expression.hpp @@ -116,7 +116,7 @@ namespace boost { namespace phoenix template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; diff --git a/3party/boost/boost/phoenix/core/is_nullary.hpp b/3party/boost/boost/phoenix/core/is_nullary.hpp index b949a536b6..509c4d25be 100644 --- a/3party/boost/boost/phoenix/core/is_nullary.hpp +++ b/3party/boost/boost/phoenix/core/is_nullary.hpp @@ -119,7 +119,7 @@ namespace boost { namespace phoenix mpl::true_ , boost::phoenix::is_nullary > - , int + , proto::empty_env >::result_type {}; diff --git a/3party/boost/boost/phoenix/core/meta_grammar.hpp b/3party/boost/boost/phoenix/core/meta_grammar.hpp index f79f305f1c..315419d352 100644 --- a/3party/boost/boost/phoenix/core/meta_grammar.hpp +++ b/3party/boost/boost/phoenix/core/meta_grammar.hpp @@ -52,8 +52,8 @@ namespace boost { namespace phoenix }; template - struct impl - : proto::transform_impl + struct impl + : proto::transform_impl { typedef meta_grammar::impl< @@ -71,7 +71,7 @@ namespace boost { namespace phoenix , typename impl::data_param ) const { - return what()(e, env(s), actions(s)); + return what()(e, phoenix::env(s), actions(s)); } }; @@ -95,7 +95,7 @@ namespace boost { namespace phoenix , typename impl::data_param ) const { - return what()(e, env(s), actions(s)); + return what()(e, phoenix::env(s), actions(s)); } }; }; diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp index 2a47cb6a25..d216b44dd3 100644 --- a/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp +++ b/3party/boost/boost/phoenix/core/preprocessed/expression_10.hpp @@ -58,7 +58,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -100,7 +100,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -142,7 +142,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -184,7 +184,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -226,7 +226,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -268,7 +268,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -310,7 +310,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -352,7 +352,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -394,7 +394,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -436,7 +436,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp index 6a4dbdaf39..fafc82df82 100644 --- a/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp +++ b/3party/boost/boost/phoenix/core/preprocessed/expression_20.hpp @@ -58,7 +58,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -100,7 +100,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -142,7 +142,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -184,7 +184,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -226,7 +226,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -268,7 +268,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -310,7 +310,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -352,7 +352,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -394,7 +394,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -436,7 +436,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -478,7 +478,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -520,7 +520,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -562,7 +562,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -604,7 +604,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -646,7 +646,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -688,7 +688,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -730,7 +730,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -772,7 +772,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -814,7 +814,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -856,7 +856,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp index 10fabb3fc6..b9b65ebb22 100644 --- a/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp +++ b/3party/boost/boost/phoenix/core/preprocessed/expression_30.hpp @@ -58,7 +58,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -100,7 +100,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -142,7 +142,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -184,7 +184,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -226,7 +226,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -268,7 +268,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -310,7 +310,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -352,7 +352,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -394,7 +394,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -436,7 +436,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -478,7 +478,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -520,7 +520,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -562,7 +562,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -604,7 +604,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -646,7 +646,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -688,7 +688,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -730,7 +730,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -772,7 +772,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -814,7 +814,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -856,7 +856,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -898,7 +898,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -940,7 +940,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -982,7 +982,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1024,7 +1024,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1066,7 +1066,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1108,7 +1108,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1150,7 +1150,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1192,7 +1192,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1234,7 +1234,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1276,7 +1276,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp index 3f3e79bd71..7c9ceddcfd 100644 --- a/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp +++ b/3party/boost/boost/phoenix/core/preprocessed/expression_40.hpp @@ -58,7 +58,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -100,7 +100,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -142,7 +142,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -184,7 +184,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -226,7 +226,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -268,7 +268,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -310,7 +310,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -352,7 +352,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -394,7 +394,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -436,7 +436,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -478,7 +478,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -520,7 +520,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -562,7 +562,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -604,7 +604,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -646,7 +646,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -688,7 +688,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -730,7 +730,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -772,7 +772,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -814,7 +814,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -856,7 +856,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -898,7 +898,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -940,7 +940,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -982,7 +982,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1024,7 +1024,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1066,7 +1066,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1108,7 +1108,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1150,7 +1150,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1192,7 +1192,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1234,7 +1234,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1276,7 +1276,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1318,7 +1318,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1360,7 +1360,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1402,7 +1402,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1444,7 +1444,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1486,7 +1486,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1528,7 +1528,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1570,7 +1570,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1612,7 +1612,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1654,7 +1654,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1696,7 +1696,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; diff --git a/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp b/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp index 900fc4e43f..8b4f360f45 100644 --- a/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp +++ b/3party/boost/boost/phoenix/core/preprocessed/expression_50.hpp @@ -58,7 +58,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -100,7 +100,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -142,7 +142,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -184,7 +184,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -226,7 +226,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -268,7 +268,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -310,7 +310,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -352,7 +352,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -394,7 +394,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -436,7 +436,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -478,7 +478,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -520,7 +520,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -562,7 +562,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -604,7 +604,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -646,7 +646,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -688,7 +688,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -730,7 +730,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -772,7 +772,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -814,7 +814,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -856,7 +856,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -898,7 +898,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -940,7 +940,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -982,7 +982,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1024,7 +1024,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1066,7 +1066,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1108,7 +1108,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1150,7 +1150,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1192,7 +1192,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1234,7 +1234,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1276,7 +1276,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1318,7 +1318,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1360,7 +1360,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1402,7 +1402,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1444,7 +1444,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1486,7 +1486,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1528,7 +1528,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1570,7 +1570,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1612,7 +1612,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1654,7 +1654,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1696,7 +1696,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1738,7 +1738,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1780,7 +1780,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1822,7 +1822,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1864,7 +1864,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1906,7 +1906,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1948,7 +1948,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -1990,7 +1990,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -2032,7 +2032,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -2074,7 +2074,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; @@ -2116,7 +2116,7 @@ namespace boost { namespace phoenix } template struct impl - : proto::detail::pass_through_impl + : proto::pass_through::template impl {}; typedef Tag proto_tag; diff --git a/3party/boost/boost/phoenix/core/value.hpp b/3party/boost/boost/phoenix/core/value.hpp index 9d757d36b1..59cc369223 100644 --- a/3party/boost/boost/phoenix/core/value.hpp +++ b/3party/boost/boost/phoenix/core/value.hpp @@ -56,7 +56,7 @@ namespace boost { namespace phoenix struct result : boost::remove_const< typename boost::remove_reference< - typename evaluator::impl::result_type + typename evaluator::impl::result_type >::type > {}; diff --git a/3party/boost/boost/phoenix/object/delete.hpp b/3party/boost/boost/phoenix/object/delete.hpp index c0facf8b81..4958d86417 100644 --- a/3party/boost/boost/phoenix/object/delete.hpp +++ b/3party/boost/boost/phoenix/object/delete.hpp @@ -26,7 +26,7 @@ namespace boost { namespace phoenix template result_type - operator()(P const& p, Context &ctx) const + operator()(P const& p, Context const &ctx) const { delete boost::phoenix::eval(p, ctx); } diff --git a/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_eval_result_of.hpp b/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_eval_result_of.hpp index 897ffd3cce..d505640276 100644 --- a/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_eval_result_of.hpp +++ b/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_eval_result_of.hpp @@ -16,7 +16,7 @@ evaluator::impl< \ BOOST_PP_CAT(A, N) \ , Context \ - , int \ + , proto::empty_env \ >::result_type \ BOOST_PP_CAT(child, N); \ /**/ diff --git a/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp b/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp index 79c40b7c49..59f5d5ce23 100644 --- a/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp +++ b/3party/boost/boost/phoenix/operator/detail/mem_fun_ptr_gen.hpp @@ -65,6 +65,29 @@ namespace boost { namespace phoenix }; + struct make_mem_fun_ptr_gen + : proto::callable + { + template + struct result; + + template + struct result + { + typedef + mem_fun_ptr_gen< + typename remove_const::type>::type + , typename remove_const::type>::type + > + type; + }; + + template + mem_fun_ptr_gen operator()(Object const & obj, MemPtr ptr) const + { + return mem_fun_ptr_gen(obj, ptr); + } + }; } }} diff --git a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_10.hpp b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_10.hpp index 216c3e6f7d..2b6ccae0be 100644 --- a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_10.hpp +++ b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_10.hpp @@ -213,5 +213,26 @@ namespace boost { namespace phoenix Object const& obj; MemPtr ptr; }; + struct make_mem_fun_ptr_gen + : proto::callable + { + template + struct result; + template + struct result + { + typedef + mem_fun_ptr_gen< + typename remove_const::type>::type + , typename remove_const::type>::type + > + type; + }; + template + mem_fun_ptr_gen operator()(Object const & obj, MemPtr ptr) const + { + return mem_fun_ptr_gen(obj, ptr); + } + }; } }} diff --git a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_20.hpp b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_20.hpp index 9a24eb9ad6..ac4621a81a 100644 --- a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_20.hpp +++ b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_20.hpp @@ -423,5 +423,26 @@ namespace boost { namespace phoenix Object const& obj; MemPtr ptr; }; + struct make_mem_fun_ptr_gen + : proto::callable + { + template + struct result; + template + struct result + { + typedef + mem_fun_ptr_gen< + typename remove_const::type>::type + , typename remove_const::type>::type + > + type; + }; + template + mem_fun_ptr_gen operator()(Object const & obj, MemPtr ptr) const + { + return mem_fun_ptr_gen(obj, ptr); + } + }; } }} diff --git a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_30.hpp b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_30.hpp index ca3796b8e4..8e0fba4c0e 100644 --- a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_30.hpp +++ b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_30.hpp @@ -633,5 +633,26 @@ namespace boost { namespace phoenix Object const& obj; MemPtr ptr; }; + struct make_mem_fun_ptr_gen + : proto::callable + { + template + struct result; + template + struct result + { + typedef + mem_fun_ptr_gen< + typename remove_const::type>::type + , typename remove_const::type>::type + > + type; + }; + template + mem_fun_ptr_gen operator()(Object const & obj, MemPtr ptr) const + { + return mem_fun_ptr_gen(obj, ptr); + } + }; } }} diff --git a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_40.hpp b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_40.hpp index 5adbc37236..a61836e5a6 100644 --- a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_40.hpp +++ b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_40.hpp @@ -843,5 +843,26 @@ namespace boost { namespace phoenix Object const& obj; MemPtr ptr; }; + struct make_mem_fun_ptr_gen + : proto::callable + { + template + struct result; + template + struct result + { + typedef + mem_fun_ptr_gen< + typename remove_const::type>::type + , typename remove_const::type>::type + > + type; + }; + template + mem_fun_ptr_gen operator()(Object const & obj, MemPtr ptr) const + { + return mem_fun_ptr_gen(obj, ptr); + } + }; } }} diff --git a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_50.hpp b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_50.hpp index cfed385bf4..d93a324516 100644 --- a/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_50.hpp +++ b/3party/boost/boost/phoenix/operator/detail/preprocessed/mem_fun_ptr_gen_50.hpp @@ -1053,5 +1053,26 @@ namespace boost { namespace phoenix Object const& obj; MemPtr ptr; }; + struct make_mem_fun_ptr_gen + : proto::callable + { + template + struct result; + template + struct result + { + typedef + mem_fun_ptr_gen< + typename remove_const::type>::type + , typename remove_const::type>::type + > + type; + }; + template + mem_fun_ptr_gen operator()(Object const & obj, MemPtr ptr) const + { + return mem_fun_ptr_gen(obj, ptr); + } + }; } }} diff --git a/3party/boost/boost/phoenix/operator/member.hpp b/3party/boost/boost/phoenix/operator/member.hpp index 8c89e6a028..a489d46b26 100644 --- a/3party/boost/boost/phoenix/operator/member.hpp +++ b/3party/boost/boost/phoenix/operator/member.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -42,18 +43,21 @@ namespace boost { namespace phoenix { BOOST_PHOENIX_BINARY_OPERATORS((mem_ptr)) - template - inline - typename boost::enable_if< - is_member_function_pointer - , detail::mem_fun_ptr_gen, MemPtr> const - >::type - operator->*(actor const& obj, MemPtr ptr) - { - return detail::mem_fun_ptr_gen, MemPtr>(obj, ptr); - } - - using proto::exprns_::operator->*; + template<> + struct phoenix_generator::case_ + : proto::or_< + proto::when< + proto::and_< + proto::mem_ptr > + , proto::if_ > >()> + > + , proto::call)> + > + , proto::otherwise< + proto::call(proto::_)> + > + > + {}; namespace result_of { @@ -117,7 +121,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( BOOST_PHOENIX_A_const_ref_a - , Context & ctx + , Context const & ctx ) const { return diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp index bb321d7582..5e1878114e 100644 --- a/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp +++ b/3party/boost/boost/phoenix/operator/preprocessed/member_10.hpp @@ -8,17 +8,21 @@ namespace boost { namespace phoenix { namespace expression { template struct mem_ptr : expr {}; typedef proto::functional::make_expr make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr {}; } template struct meta_grammar::case_ : enable_rule {}; - template - inline - typename boost::enable_if< - is_member_function_pointer - , detail::mem_fun_ptr_gen, MemPtr> const - >::type - operator->*(actor const& obj, MemPtr ptr) - { - return detail::mem_fun_ptr_gen, MemPtr>(obj, ptr); - } - using proto::exprns_::operator->*; + template<> + struct phoenix_generator::case_ + : proto::or_< + proto::when< + proto::and_< + proto::mem_ptr > + , proto::if_ > >()> + > + , proto::call)> + > + , proto::otherwise< + proto::call(proto::_)> + > + > + {}; namespace result_of { template < @@ -37,7 +41,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename boost::result_of< child1( @@ -56,7 +60,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename boost::result_of< child1( @@ -75,7 +79,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename boost::result_of< child1( @@ -94,7 +98,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename boost::result_of< child1( @@ -113,7 +117,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename boost::result_of< child1( @@ -132,7 +136,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename boost::result_of< child1( @@ -151,7 +155,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename boost::result_of< child1( @@ -170,7 +174,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename boost::result_of< child1( @@ -189,7 +193,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename boost::result_of< child1( @@ -222,7 +226,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 - , Context & ctx + , Context const & ctx ) const { return @@ -253,7 +257,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 - , Context & ctx + , Context const & ctx ) const { return @@ -284,7 +288,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 - , Context & ctx + , Context const & ctx ) const { return @@ -315,7 +319,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 - , Context & ctx + , Context const & ctx ) const { return @@ -346,7 +350,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 - , Context & ctx + , Context const & ctx ) const { return @@ -377,7 +381,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 - , Context & ctx + , Context const & ctx ) const { return @@ -408,7 +412,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 - , Context & ctx + , Context const & ctx ) const { return @@ -439,7 +443,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 - , Context & ctx + , Context const & ctx ) const { return @@ -470,7 +474,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 - , Context & ctx + , Context const & ctx ) const { return diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp index 3142ac73b9..50a82630c4 100644 --- a/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp +++ b/3party/boost/boost/phoenix/operator/preprocessed/member_20.hpp @@ -8,17 +8,21 @@ namespace boost { namespace phoenix { namespace expression { template struct mem_ptr : expr {}; typedef proto::functional::make_expr make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr {}; } template struct meta_grammar::case_ : enable_rule {}; - template - inline - typename boost::enable_if< - is_member_function_pointer - , detail::mem_fun_ptr_gen, MemPtr> const - >::type - operator->*(actor const& obj, MemPtr ptr) - { - return detail::mem_fun_ptr_gen, MemPtr>(obj, ptr); - } - using proto::exprns_::operator->*; + template<> + struct phoenix_generator::case_ + : proto::or_< + proto::when< + proto::and_< + proto::mem_ptr > + , proto::if_ > >()> + > + , proto::call)> + > + , proto::otherwise< + proto::call(proto::_)> + > + > + {}; namespace result_of { template < @@ -37,7 +41,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename boost::result_of< child1( @@ -56,7 +60,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename boost::result_of< child1( @@ -75,7 +79,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename boost::result_of< child1( @@ -94,7 +98,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename boost::result_of< child1( @@ -113,7 +117,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename boost::result_of< child1( @@ -132,7 +136,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename boost::result_of< child1( @@ -151,7 +155,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename boost::result_of< child1( @@ -170,7 +174,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename boost::result_of< child1( @@ -189,7 +193,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename boost::result_of< child1( @@ -208,7 +212,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename boost::result_of< child1( @@ -227,7 +231,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename boost::result_of< child1( @@ -246,7 +250,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename boost::result_of< child1( @@ -265,7 +269,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename boost::result_of< child1( @@ -284,7 +288,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename boost::result_of< child1( @@ -303,7 +307,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename boost::result_of< child1( @@ -322,7 +326,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename boost::result_of< child1( @@ -341,7 +345,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename boost::result_of< child1( @@ -360,7 +364,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename boost::result_of< child1( @@ -379,7 +383,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename boost::result_of< child1( @@ -412,7 +416,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 - , Context & ctx + , Context const & ctx ) const { return @@ -443,7 +447,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 - , Context & ctx + , Context const & ctx ) const { return @@ -474,7 +478,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 - , Context & ctx + , Context const & ctx ) const { return @@ -505,7 +509,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 - , Context & ctx + , Context const & ctx ) const { return @@ -536,7 +540,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 - , Context & ctx + , Context const & ctx ) const { return @@ -567,7 +571,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 - , Context & ctx + , Context const & ctx ) const { return @@ -598,7 +602,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 - , Context & ctx + , Context const & ctx ) const { return @@ -629,7 +633,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 - , Context & ctx + , Context const & ctx ) const { return @@ -660,7 +664,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 - , Context & ctx + , Context const & ctx ) const { return @@ -691,7 +695,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 - , Context & ctx + , Context const & ctx ) const { return @@ -722,7 +726,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 - , Context & ctx + , Context const & ctx ) const { return @@ -753,7 +757,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 - , Context & ctx + , Context const & ctx ) const { return @@ -784,7 +788,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 - , Context & ctx + , Context const & ctx ) const { return @@ -815,7 +819,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 - , Context & ctx + , Context const & ctx ) const { return @@ -846,7 +850,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 - , Context & ctx + , Context const & ctx ) const { return @@ -877,7 +881,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 - , Context & ctx + , Context const & ctx ) const { return @@ -908,7 +912,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 - , Context & ctx + , Context const & ctx ) const { return @@ -939,7 +943,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 - , Context & ctx + , Context const & ctx ) const { return @@ -970,7 +974,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 - , Context & ctx + , Context const & ctx ) const { return diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp index 195ce89b5d..be6ddf9066 100644 --- a/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp +++ b/3party/boost/boost/phoenix/operator/preprocessed/member_30.hpp @@ -8,17 +8,21 @@ namespace boost { namespace phoenix { namespace expression { template struct mem_ptr : expr {}; typedef proto::functional::make_expr make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr {}; } template struct meta_grammar::case_ : enable_rule {}; - template - inline - typename boost::enable_if< - is_member_function_pointer - , detail::mem_fun_ptr_gen, MemPtr> const - >::type - operator->*(actor const& obj, MemPtr ptr) - { - return detail::mem_fun_ptr_gen, MemPtr>(obj, ptr); - } - using proto::exprns_::operator->*; + template<> + struct phoenix_generator::case_ + : proto::or_< + proto::when< + proto::and_< + proto::mem_ptr > + , proto::if_ > >()> + > + , proto::call)> + > + , proto::otherwise< + proto::call(proto::_)> + > + > + {}; namespace result_of { template < @@ -37,7 +41,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename boost::result_of< child1( @@ -56,7 +60,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename boost::result_of< child1( @@ -75,7 +79,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename boost::result_of< child1( @@ -94,7 +98,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename boost::result_of< child1( @@ -113,7 +117,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename boost::result_of< child1( @@ -132,7 +136,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename boost::result_of< child1( @@ -151,7 +155,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename boost::result_of< child1( @@ -170,7 +174,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename boost::result_of< child1( @@ -189,7 +193,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename boost::result_of< child1( @@ -208,7 +212,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename boost::result_of< child1( @@ -227,7 +231,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename boost::result_of< child1( @@ -246,7 +250,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename boost::result_of< child1( @@ -265,7 +269,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename boost::result_of< child1( @@ -284,7 +288,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename boost::result_of< child1( @@ -303,7 +307,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename boost::result_of< child1( @@ -322,7 +326,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename boost::result_of< child1( @@ -341,7 +345,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename boost::result_of< child1( @@ -360,7 +364,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename boost::result_of< child1( @@ -379,7 +383,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename boost::result_of< child1( @@ -398,7 +402,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename boost::result_of< child1( @@ -417,7 +421,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename boost::result_of< child1( @@ -436,7 +440,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename boost::result_of< child1( @@ -455,7 +459,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename boost::result_of< child1( @@ -474,7 +478,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename boost::result_of< child1( @@ -493,7 +497,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename boost::result_of< child1( @@ -512,7 +516,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename boost::result_of< child1( @@ -531,7 +535,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename boost::result_of< child1( @@ -550,7 +554,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename boost::result_of< child1( @@ -569,7 +573,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename boost::result_of< child1( @@ -602,7 +606,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 - , Context & ctx + , Context const & ctx ) const { return @@ -633,7 +637,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 - , Context & ctx + , Context const & ctx ) const { return @@ -664,7 +668,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 - , Context & ctx + , Context const & ctx ) const { return @@ -695,7 +699,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 - , Context & ctx + , Context const & ctx ) const { return @@ -726,7 +730,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 - , Context & ctx + , Context const & ctx ) const { return @@ -757,7 +761,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 - , Context & ctx + , Context const & ctx ) const { return @@ -788,7 +792,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 - , Context & ctx + , Context const & ctx ) const { return @@ -819,7 +823,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 - , Context & ctx + , Context const & ctx ) const { return @@ -850,7 +854,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 - , Context & ctx + , Context const & ctx ) const { return @@ -881,7 +885,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 - , Context & ctx + , Context const & ctx ) const { return @@ -912,7 +916,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 - , Context & ctx + , Context const & ctx ) const { return @@ -943,7 +947,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 - , Context & ctx + , Context const & ctx ) const { return @@ -974,7 +978,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 - , Context & ctx + , Context const & ctx ) const { return @@ -1005,7 +1009,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 - , Context & ctx + , Context const & ctx ) const { return @@ -1036,7 +1040,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 - , Context & ctx + , Context const & ctx ) const { return @@ -1067,7 +1071,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 - , Context & ctx + , Context const & ctx ) const { return @@ -1098,7 +1102,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 - , Context & ctx + , Context const & ctx ) const { return @@ -1129,7 +1133,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 - , Context & ctx + , Context const & ctx ) const { return @@ -1160,7 +1164,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 - , Context & ctx + , Context const & ctx ) const { return @@ -1191,7 +1195,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 - , Context & ctx + , Context const & ctx ) const { return @@ -1222,7 +1226,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 - , Context & ctx + , Context const & ctx ) const { return @@ -1253,7 +1257,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 - , Context & ctx + , Context const & ctx ) const { return @@ -1284,7 +1288,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 - , Context & ctx + , Context const & ctx ) const { return @@ -1315,7 +1319,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 - , Context & ctx + , Context const & ctx ) const { return @@ -1346,7 +1350,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 - , Context & ctx + , Context const & ctx ) const { return @@ -1377,7 +1381,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 - , Context & ctx + , Context const & ctx ) const { return @@ -1408,7 +1412,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 - , Context & ctx + , Context const & ctx ) const { return @@ -1439,7 +1443,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 - , Context & ctx + , Context const & ctx ) const { return @@ -1470,7 +1474,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 - , Context & ctx + , Context const & ctx ) const { return diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp index 3b5ecfeb9f..d03f0c9e96 100644 --- a/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp +++ b/3party/boost/boost/phoenix/operator/preprocessed/member_40.hpp @@ -8,17 +8,21 @@ namespace boost { namespace phoenix { namespace expression { template struct mem_ptr : expr {}; typedef proto::functional::make_expr make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr {}; } template struct meta_grammar::case_ : enable_rule {}; - template - inline - typename boost::enable_if< - is_member_function_pointer - , detail::mem_fun_ptr_gen, MemPtr> const - >::type - operator->*(actor const& obj, MemPtr ptr) - { - return detail::mem_fun_ptr_gen, MemPtr>(obj, ptr); - } - using proto::exprns_::operator->*; + template<> + struct phoenix_generator::case_ + : proto::or_< + proto::when< + proto::and_< + proto::mem_ptr > + , proto::if_ > >()> + > + , proto::call)> + > + , proto::otherwise< + proto::call(proto::_)> + > + > + {}; namespace result_of { template < @@ -37,7 +41,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename boost::result_of< child1( @@ -56,7 +60,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename boost::result_of< child1( @@ -75,7 +79,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename boost::result_of< child1( @@ -94,7 +98,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename boost::result_of< child1( @@ -113,7 +117,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename boost::result_of< child1( @@ -132,7 +136,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename boost::result_of< child1( @@ -151,7 +155,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename boost::result_of< child1( @@ -170,7 +174,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename boost::result_of< child1( @@ -189,7 +193,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename boost::result_of< child1( @@ -208,7 +212,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename boost::result_of< child1( @@ -227,7 +231,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename boost::result_of< child1( @@ -246,7 +250,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename boost::result_of< child1( @@ -265,7 +269,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename boost::result_of< child1( @@ -284,7 +288,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename boost::result_of< child1( @@ -303,7 +307,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename boost::result_of< child1( @@ -322,7 +326,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename boost::result_of< child1( @@ -341,7 +345,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename boost::result_of< child1( @@ -360,7 +364,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename boost::result_of< child1( @@ -379,7 +383,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename boost::result_of< child1( @@ -398,7 +402,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename boost::result_of< child1( @@ -417,7 +421,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename boost::result_of< child1( @@ -436,7 +440,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename boost::result_of< child1( @@ -455,7 +459,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename boost::result_of< child1( @@ -474,7 +478,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename boost::result_of< child1( @@ -493,7 +497,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename boost::result_of< child1( @@ -512,7 +516,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename boost::result_of< child1( @@ -531,7 +535,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename boost::result_of< child1( @@ -550,7 +554,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename boost::result_of< child1( @@ -569,7 +573,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename boost::result_of< child1( @@ -588,7 +592,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename boost::result_of< child1( @@ -607,7 +611,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename boost::result_of< child1( @@ -626,7 +630,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename boost::result_of< child1( @@ -645,7 +649,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename boost::result_of< child1( @@ -664,7 +668,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename boost::result_of< child1( @@ -683,7 +687,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename boost::result_of< child1( @@ -702,7 +706,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename boost::result_of< child1( @@ -721,7 +725,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename boost::result_of< child1( @@ -740,7 +744,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename boost::result_of< child1( @@ -759,7 +763,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename boost::result_of< child1( @@ -792,7 +796,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 - , Context & ctx + , Context const & ctx ) const { return @@ -823,7 +827,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 - , Context & ctx + , Context const & ctx ) const { return @@ -854,7 +858,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 - , Context & ctx + , Context const & ctx ) const { return @@ -885,7 +889,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 - , Context & ctx + , Context const & ctx ) const { return @@ -916,7 +920,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 - , Context & ctx + , Context const & ctx ) const { return @@ -947,7 +951,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 - , Context & ctx + , Context const & ctx ) const { return @@ -978,7 +982,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 - , Context & ctx + , Context const & ctx ) const { return @@ -1009,7 +1013,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 - , Context & ctx + , Context const & ctx ) const { return @@ -1040,7 +1044,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 - , Context & ctx + , Context const & ctx ) const { return @@ -1071,7 +1075,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 - , Context & ctx + , Context const & ctx ) const { return @@ -1102,7 +1106,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 - , Context & ctx + , Context const & ctx ) const { return @@ -1133,7 +1137,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 - , Context & ctx + , Context const & ctx ) const { return @@ -1164,7 +1168,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 - , Context & ctx + , Context const & ctx ) const { return @@ -1195,7 +1199,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 - , Context & ctx + , Context const & ctx ) const { return @@ -1226,7 +1230,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 - , Context & ctx + , Context const & ctx ) const { return @@ -1257,7 +1261,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 - , Context & ctx + , Context const & ctx ) const { return @@ -1288,7 +1292,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 - , Context & ctx + , Context const & ctx ) const { return @@ -1319,7 +1323,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 - , Context & ctx + , Context const & ctx ) const { return @@ -1350,7 +1354,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 - , Context & ctx + , Context const & ctx ) const { return @@ -1381,7 +1385,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 - , Context & ctx + , Context const & ctx ) const { return @@ -1412,7 +1416,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 - , Context & ctx + , Context const & ctx ) const { return @@ -1443,7 +1447,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 - , Context & ctx + , Context const & ctx ) const { return @@ -1474,7 +1478,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 - , Context & ctx + , Context const & ctx ) const { return @@ -1505,7 +1509,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 - , Context & ctx + , Context const & ctx ) const { return @@ -1536,7 +1540,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 - , Context & ctx + , Context const & ctx ) const { return @@ -1567,7 +1571,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 - , Context & ctx + , Context const & ctx ) const { return @@ -1598,7 +1602,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 - , Context & ctx + , Context const & ctx ) const { return @@ -1629,7 +1633,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 - , Context & ctx + , Context const & ctx ) const { return @@ -1660,7 +1664,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 - , Context & ctx + , Context const & ctx ) const { return @@ -1691,7 +1695,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 - , Context & ctx + , Context const & ctx ) const { return @@ -1722,7 +1726,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 - , Context & ctx + , Context const & ctx ) const { return @@ -1753,7 +1757,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 - , Context & ctx + , Context const & ctx ) const { return @@ -1784,7 +1788,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 - , Context & ctx + , Context const & ctx ) const { return @@ -1815,7 +1819,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 - , Context & ctx + , Context const & ctx ) const { return @@ -1846,7 +1850,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 - , Context & ctx + , Context const & ctx ) const { return @@ -1877,7 +1881,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 - , Context & ctx + , Context const & ctx ) const { return @@ -1908,7 +1912,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 - , Context & ctx + , Context const & ctx ) const { return @@ -1939,7 +1943,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 - , Context & ctx + , Context const & ctx ) const { return @@ -1970,7 +1974,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 - , Context & ctx + , Context const & ctx ) const { return diff --git a/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp b/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp index 047d71a36f..bbaf2a4ed7 100644 --- a/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp +++ b/3party/boost/boost/phoenix/operator/preprocessed/member_50.hpp @@ -8,17 +8,21 @@ namespace boost { namespace phoenix { namespace expression { template struct mem_ptr : expr {}; typedef proto::functional::make_expr make_mem_ptr; } namespace rule { struct mem_ptr : expression:: mem_ptr {}; } template struct meta_grammar::case_ : enable_rule {}; - template - inline - typename boost::enable_if< - is_member_function_pointer - , detail::mem_fun_ptr_gen, MemPtr> const - >::type - operator->*(actor const& obj, MemPtr ptr) - { - return detail::mem_fun_ptr_gen, MemPtr>(obj, ptr); - } - using proto::exprns_::operator->*; + template<> + struct phoenix_generator::case_ + : proto::or_< + proto::when< + proto::and_< + proto::mem_ptr > + , proto::if_ > >()> + > + , proto::call)> + > + , proto::otherwise< + proto::call(proto::_)> + > + > + {}; namespace result_of { template < @@ -37,7 +41,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename boost::result_of< child1( @@ -56,7 +60,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename boost::result_of< child1( @@ -75,7 +79,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename boost::result_of< child1( @@ -94,7 +98,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename boost::result_of< child1( @@ -113,7 +117,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename boost::result_of< child1( @@ -132,7 +136,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename boost::result_of< child1( @@ -151,7 +155,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename boost::result_of< child1( @@ -170,7 +174,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename boost::result_of< child1( @@ -189,7 +193,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename boost::result_of< child1( @@ -208,7 +212,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename boost::result_of< child1( @@ -227,7 +231,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename boost::result_of< child1( @@ -246,7 +250,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename boost::result_of< child1( @@ -265,7 +269,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename boost::result_of< child1( @@ -284,7 +288,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename boost::result_of< child1( @@ -303,7 +307,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename boost::result_of< child1( @@ -322,7 +326,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename boost::result_of< child1( @@ -341,7 +345,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename boost::result_of< child1( @@ -360,7 +364,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename boost::result_of< child1( @@ -379,7 +383,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename boost::result_of< child1( @@ -398,7 +402,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename boost::result_of< child1( @@ -417,7 +421,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename boost::result_of< child1( @@ -436,7 +440,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename boost::result_of< child1( @@ -455,7 +459,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename boost::result_of< child1( @@ -474,7 +478,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename boost::result_of< child1( @@ -493,7 +497,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename boost::result_of< child1( @@ -512,7 +516,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename boost::result_of< child1( @@ -531,7 +535,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename boost::result_of< child1( @@ -550,7 +554,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename boost::result_of< child1( @@ -569,7 +573,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename boost::result_of< child1( @@ -588,7 +592,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename boost::result_of< child1( @@ -607,7 +611,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename boost::result_of< child1( @@ -626,7 +630,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename boost::result_of< child1( @@ -645,7 +649,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename boost::result_of< child1( @@ -664,7 +668,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename boost::result_of< child1( @@ -683,7 +687,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename boost::result_of< child1( @@ -702,7 +706,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename boost::result_of< child1( @@ -721,7 +725,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename boost::result_of< child1( @@ -740,7 +744,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename boost::result_of< child1( @@ -759,7 +763,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename boost::result_of< child1( @@ -778,7 +782,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename boost::result_of< child1( @@ -797,7 +801,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename boost::result_of< child1( @@ -816,7 +820,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename boost::result_of< child1( @@ -835,7 +839,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; typedef typename evaluator::impl< A43 , Context , int >::result_type child43; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename evaluator::impl< A43 , Context , proto::empty_env >::result_type child43; typedef typename boost::result_of< child1( @@ -854,7 +858,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; typedef typename evaluator::impl< A43 , Context , int >::result_type child43; typedef typename evaluator::impl< A44 , Context , int >::result_type child44; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename evaluator::impl< A43 , Context , proto::empty_env >::result_type child43; typedef typename evaluator::impl< A44 , Context , proto::empty_env >::result_type child44; typedef typename boost::result_of< child1( @@ -873,7 +877,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; typedef typename evaluator::impl< A43 , Context , int >::result_type child43; typedef typename evaluator::impl< A44 , Context , int >::result_type child44; typedef typename evaluator::impl< A45 , Context , int >::result_type child45; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename evaluator::impl< A43 , Context , proto::empty_env >::result_type child43; typedef typename evaluator::impl< A44 , Context , proto::empty_env >::result_type child44; typedef typename evaluator::impl< A45 , Context , proto::empty_env >::result_type child45; typedef typename boost::result_of< child1( @@ -892,7 +896,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; typedef typename evaluator::impl< A43 , Context , int >::result_type child43; typedef typename evaluator::impl< A44 , Context , int >::result_type child44; typedef typename evaluator::impl< A45 , Context , int >::result_type child45; typedef typename evaluator::impl< A46 , Context , int >::result_type child46; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename evaluator::impl< A43 , Context , proto::empty_env >::result_type child43; typedef typename evaluator::impl< A44 , Context , proto::empty_env >::result_type child44; typedef typename evaluator::impl< A45 , Context , proto::empty_env >::result_type child45; typedef typename evaluator::impl< A46 , Context , proto::empty_env >::result_type child46; typedef typename boost::result_of< child1( @@ -911,7 +915,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; typedef typename evaluator::impl< A43 , Context , int >::result_type child43; typedef typename evaluator::impl< A44 , Context , int >::result_type child44; typedef typename evaluator::impl< A45 , Context , int >::result_type child45; typedef typename evaluator::impl< A46 , Context , int >::result_type child46; typedef typename evaluator::impl< A47 , Context , int >::result_type child47; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename evaluator::impl< A43 , Context , proto::empty_env >::result_type child43; typedef typename evaluator::impl< A44 , Context , proto::empty_env >::result_type child44; typedef typename evaluator::impl< A45 , Context , proto::empty_env >::result_type child45; typedef typename evaluator::impl< A46 , Context , proto::empty_env >::result_type child46; typedef typename evaluator::impl< A47 , Context , proto::empty_env >::result_type child47; typedef typename boost::result_of< child1( @@ -930,7 +934,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; typedef typename evaluator::impl< A43 , Context , int >::result_type child43; typedef typename evaluator::impl< A44 , Context , int >::result_type child44; typedef typename evaluator::impl< A45 , Context , int >::result_type child45; typedef typename evaluator::impl< A46 , Context , int >::result_type child46; typedef typename evaluator::impl< A47 , Context , int >::result_type child47; typedef typename evaluator::impl< A48 , Context , int >::result_type child48; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename evaluator::impl< A43 , Context , proto::empty_env >::result_type child43; typedef typename evaluator::impl< A44 , Context , proto::empty_env >::result_type child44; typedef typename evaluator::impl< A45 , Context , proto::empty_env >::result_type child45; typedef typename evaluator::impl< A46 , Context , proto::empty_env >::result_type child46; typedef typename evaluator::impl< A47 , Context , proto::empty_env >::result_type child47; typedef typename evaluator::impl< A48 , Context , proto::empty_env >::result_type child48; typedef typename boost::result_of< child1( @@ -949,7 +953,7 @@ namespace boost { namespace phoenix template struct mem_fun_ptr_eval { - typedef typename evaluator::impl< A0 , Context , int >::result_type child0; typedef typename evaluator::impl< A1 , Context , int >::result_type child1; typedef typename evaluator::impl< A2 , Context , int >::result_type child2; typedef typename evaluator::impl< A3 , Context , int >::result_type child3; typedef typename evaluator::impl< A4 , Context , int >::result_type child4; typedef typename evaluator::impl< A5 , Context , int >::result_type child5; typedef typename evaluator::impl< A6 , Context , int >::result_type child6; typedef typename evaluator::impl< A7 , Context , int >::result_type child7; typedef typename evaluator::impl< A8 , Context , int >::result_type child8; typedef typename evaluator::impl< A9 , Context , int >::result_type child9; typedef typename evaluator::impl< A10 , Context , int >::result_type child10; typedef typename evaluator::impl< A11 , Context , int >::result_type child11; typedef typename evaluator::impl< A12 , Context , int >::result_type child12; typedef typename evaluator::impl< A13 , Context , int >::result_type child13; typedef typename evaluator::impl< A14 , Context , int >::result_type child14; typedef typename evaluator::impl< A15 , Context , int >::result_type child15; typedef typename evaluator::impl< A16 , Context , int >::result_type child16; typedef typename evaluator::impl< A17 , Context , int >::result_type child17; typedef typename evaluator::impl< A18 , Context , int >::result_type child18; typedef typename evaluator::impl< A19 , Context , int >::result_type child19; typedef typename evaluator::impl< A20 , Context , int >::result_type child20; typedef typename evaluator::impl< A21 , Context , int >::result_type child21; typedef typename evaluator::impl< A22 , Context , int >::result_type child22; typedef typename evaluator::impl< A23 , Context , int >::result_type child23; typedef typename evaluator::impl< A24 , Context , int >::result_type child24; typedef typename evaluator::impl< A25 , Context , int >::result_type child25; typedef typename evaluator::impl< A26 , Context , int >::result_type child26; typedef typename evaluator::impl< A27 , Context , int >::result_type child27; typedef typename evaluator::impl< A28 , Context , int >::result_type child28; typedef typename evaluator::impl< A29 , Context , int >::result_type child29; typedef typename evaluator::impl< A30 , Context , int >::result_type child30; typedef typename evaluator::impl< A31 , Context , int >::result_type child31; typedef typename evaluator::impl< A32 , Context , int >::result_type child32; typedef typename evaluator::impl< A33 , Context , int >::result_type child33; typedef typename evaluator::impl< A34 , Context , int >::result_type child34; typedef typename evaluator::impl< A35 , Context , int >::result_type child35; typedef typename evaluator::impl< A36 , Context , int >::result_type child36; typedef typename evaluator::impl< A37 , Context , int >::result_type child37; typedef typename evaluator::impl< A38 , Context , int >::result_type child38; typedef typename evaluator::impl< A39 , Context , int >::result_type child39; typedef typename evaluator::impl< A40 , Context , int >::result_type child40; typedef typename evaluator::impl< A41 , Context , int >::result_type child41; typedef typename evaluator::impl< A42 , Context , int >::result_type child42; typedef typename evaluator::impl< A43 , Context , int >::result_type child43; typedef typename evaluator::impl< A44 , Context , int >::result_type child44; typedef typename evaluator::impl< A45 , Context , int >::result_type child45; typedef typename evaluator::impl< A46 , Context , int >::result_type child46; typedef typename evaluator::impl< A47 , Context , int >::result_type child47; typedef typename evaluator::impl< A48 , Context , int >::result_type child48; typedef typename evaluator::impl< A49 , Context , int >::result_type child49; + typedef typename evaluator::impl< A0 , Context , proto::empty_env >::result_type child0; typedef typename evaluator::impl< A1 , Context , proto::empty_env >::result_type child1; typedef typename evaluator::impl< A2 , Context , proto::empty_env >::result_type child2; typedef typename evaluator::impl< A3 , Context , proto::empty_env >::result_type child3; typedef typename evaluator::impl< A4 , Context , proto::empty_env >::result_type child4; typedef typename evaluator::impl< A5 , Context , proto::empty_env >::result_type child5; typedef typename evaluator::impl< A6 , Context , proto::empty_env >::result_type child6; typedef typename evaluator::impl< A7 , Context , proto::empty_env >::result_type child7; typedef typename evaluator::impl< A8 , Context , proto::empty_env >::result_type child8; typedef typename evaluator::impl< A9 , Context , proto::empty_env >::result_type child9; typedef typename evaluator::impl< A10 , Context , proto::empty_env >::result_type child10; typedef typename evaluator::impl< A11 , Context , proto::empty_env >::result_type child11; typedef typename evaluator::impl< A12 , Context , proto::empty_env >::result_type child12; typedef typename evaluator::impl< A13 , Context , proto::empty_env >::result_type child13; typedef typename evaluator::impl< A14 , Context , proto::empty_env >::result_type child14; typedef typename evaluator::impl< A15 , Context , proto::empty_env >::result_type child15; typedef typename evaluator::impl< A16 , Context , proto::empty_env >::result_type child16; typedef typename evaluator::impl< A17 , Context , proto::empty_env >::result_type child17; typedef typename evaluator::impl< A18 , Context , proto::empty_env >::result_type child18; typedef typename evaluator::impl< A19 , Context , proto::empty_env >::result_type child19; typedef typename evaluator::impl< A20 , Context , proto::empty_env >::result_type child20; typedef typename evaluator::impl< A21 , Context , proto::empty_env >::result_type child21; typedef typename evaluator::impl< A22 , Context , proto::empty_env >::result_type child22; typedef typename evaluator::impl< A23 , Context , proto::empty_env >::result_type child23; typedef typename evaluator::impl< A24 , Context , proto::empty_env >::result_type child24; typedef typename evaluator::impl< A25 , Context , proto::empty_env >::result_type child25; typedef typename evaluator::impl< A26 , Context , proto::empty_env >::result_type child26; typedef typename evaluator::impl< A27 , Context , proto::empty_env >::result_type child27; typedef typename evaluator::impl< A28 , Context , proto::empty_env >::result_type child28; typedef typename evaluator::impl< A29 , Context , proto::empty_env >::result_type child29; typedef typename evaluator::impl< A30 , Context , proto::empty_env >::result_type child30; typedef typename evaluator::impl< A31 , Context , proto::empty_env >::result_type child31; typedef typename evaluator::impl< A32 , Context , proto::empty_env >::result_type child32; typedef typename evaluator::impl< A33 , Context , proto::empty_env >::result_type child33; typedef typename evaluator::impl< A34 , Context , proto::empty_env >::result_type child34; typedef typename evaluator::impl< A35 , Context , proto::empty_env >::result_type child35; typedef typename evaluator::impl< A36 , Context , proto::empty_env >::result_type child36; typedef typename evaluator::impl< A37 , Context , proto::empty_env >::result_type child37; typedef typename evaluator::impl< A38 , Context , proto::empty_env >::result_type child38; typedef typename evaluator::impl< A39 , Context , proto::empty_env >::result_type child39; typedef typename evaluator::impl< A40 , Context , proto::empty_env >::result_type child40; typedef typename evaluator::impl< A41 , Context , proto::empty_env >::result_type child41; typedef typename evaluator::impl< A42 , Context , proto::empty_env >::result_type child42; typedef typename evaluator::impl< A43 , Context , proto::empty_env >::result_type child43; typedef typename evaluator::impl< A44 , Context , proto::empty_env >::result_type child44; typedef typename evaluator::impl< A45 , Context , proto::empty_env >::result_type child45; typedef typename evaluator::impl< A46 , Context , proto::empty_env >::result_type child46; typedef typename evaluator::impl< A47 , Context , proto::empty_env >::result_type child47; typedef typename evaluator::impl< A48 , Context , proto::empty_env >::result_type child48; typedef typename evaluator::impl< A49 , Context , proto::empty_env >::result_type child49; typedef typename boost::result_of< child1( @@ -982,7 +986,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 - , Context & ctx + , Context const & ctx ) const { return @@ -1013,7 +1017,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 - , Context & ctx + , Context const & ctx ) const { return @@ -1044,7 +1048,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 - , Context & ctx + , Context const & ctx ) const { return @@ -1075,7 +1079,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 - , Context & ctx + , Context const & ctx ) const { return @@ -1106,7 +1110,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 - , Context & ctx + , Context const & ctx ) const { return @@ -1137,7 +1141,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 - , Context & ctx + , Context const & ctx ) const { return @@ -1168,7 +1172,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 - , Context & ctx + , Context const & ctx ) const { return @@ -1199,7 +1203,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 - , Context & ctx + , Context const & ctx ) const { return @@ -1230,7 +1234,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 - , Context & ctx + , Context const & ctx ) const { return @@ -1261,7 +1265,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 - , Context & ctx + , Context const & ctx ) const { return @@ -1292,7 +1296,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 - , Context & ctx + , Context const & ctx ) const { return @@ -1323,7 +1327,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 - , Context & ctx + , Context const & ctx ) const { return @@ -1354,7 +1358,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 - , Context & ctx + , Context const & ctx ) const { return @@ -1385,7 +1389,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 - , Context & ctx + , Context const & ctx ) const { return @@ -1416,7 +1420,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 - , Context & ctx + , Context const & ctx ) const { return @@ -1447,7 +1451,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 - , Context & ctx + , Context const & ctx ) const { return @@ -1478,7 +1482,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 - , Context & ctx + , Context const & ctx ) const { return @@ -1509,7 +1513,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 - , Context & ctx + , Context const & ctx ) const { return @@ -1540,7 +1544,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 - , Context & ctx + , Context const & ctx ) const { return @@ -1571,7 +1575,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 - , Context & ctx + , Context const & ctx ) const { return @@ -1602,7 +1606,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 - , Context & ctx + , Context const & ctx ) const { return @@ -1633,7 +1637,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 - , Context & ctx + , Context const & ctx ) const { return @@ -1664,7 +1668,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 - , Context & ctx + , Context const & ctx ) const { return @@ -1695,7 +1699,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 - , Context & ctx + , Context const & ctx ) const { return @@ -1726,7 +1730,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 - , Context & ctx + , Context const & ctx ) const { return @@ -1757,7 +1761,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 - , Context & ctx + , Context const & ctx ) const { return @@ -1788,7 +1792,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 - , Context & ctx + , Context const & ctx ) const { return @@ -1819,7 +1823,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 - , Context & ctx + , Context const & ctx ) const { return @@ -1850,7 +1854,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 - , Context & ctx + , Context const & ctx ) const { return @@ -1881,7 +1885,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 - , Context & ctx + , Context const & ctx ) const { return @@ -1912,7 +1916,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 - , Context & ctx + , Context const & ctx ) const { return @@ -1943,7 +1947,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 - , Context & ctx + , Context const & ctx ) const { return @@ -1974,7 +1978,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 - , Context & ctx + , Context const & ctx ) const { return @@ -2005,7 +2009,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 - , Context & ctx + , Context const & ctx ) const { return @@ -2036,7 +2040,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 - , Context & ctx + , Context const & ctx ) const { return @@ -2067,7 +2071,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 - , Context & ctx + , Context const & ctx ) const { return @@ -2098,7 +2102,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 - , Context & ctx + , Context const & ctx ) const { return @@ -2129,7 +2133,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 - , Context & ctx + , Context const & ctx ) const { return @@ -2160,7 +2164,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 - , Context & ctx + , Context const & ctx ) const { return @@ -2191,7 +2195,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 - , Context & ctx + , Context const & ctx ) const { return @@ -2222,7 +2226,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 - , Context & ctx + , Context const & ctx ) const { return @@ -2253,7 +2257,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 - , Context & ctx + , Context const & ctx ) const { return @@ -2284,7 +2288,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 - , Context & ctx + , Context const & ctx ) const { return @@ -2315,7 +2319,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 - , Context & ctx + , Context const & ctx ) const { return @@ -2346,7 +2350,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 - , Context & ctx + , Context const & ctx ) const { return @@ -2377,7 +2381,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 - , Context & ctx + , Context const & ctx ) const { return @@ -2408,7 +2412,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 - , Context & ctx + , Context const & ctx ) const { return @@ -2439,7 +2443,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48 - , Context & ctx + , Context const & ctx ) const { return @@ -2470,7 +2474,7 @@ namespace boost { namespace phoenix typename result_of::mem_fun_ptr_eval::type operator()( A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48 , A49 const& a49 - , Context & ctx + , Context const & ctx ) const { return diff --git a/3party/boost/boost/phoenix/scope/dynamic.hpp b/3party/boost/boost/phoenix/scope/dynamic.hpp index 4d8e0bb638..82653f57b6 100644 --- a/3party/boost/boost/phoenix/scope/dynamic.hpp +++ b/3party/boost/boost/phoenix/scope/dynamic.hpp @@ -145,7 +145,7 @@ namespace boost { namespace phoenix template typename result::type - operator()(N, Scope s, Context &) const + operator()(N, Scope s, Context const &) const { return fusion::at_c< diff --git a/3party/boost/boost/phoenix/scope/lambda.hpp b/3party/boost/boost/phoenix/scope/lambda.hpp index 71ff50eda7..432edd9bf2 100644 --- a/3party/boost/boost/phoenix/scope/lambda.hpp +++ b/3party/boost/boost/phoenix/scope/lambda.hpp @@ -181,7 +181,7 @@ namespace boost { namespace phoenix ) > , proto::make< - int() + proto::empty_env() > ) > @@ -214,7 +214,7 @@ namespace boost { namespace phoenix evaluator( proto::_ , _context - , proto::make + , proto::make ) > >() @@ -272,9 +272,9 @@ namespace boost { namespace phoenix , typename Context > typename result< - lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context &) + lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context const &) >::type const - operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context & ctx) const + operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context const & ctx) const { typedef typename proto::detail::uncvref< @@ -309,7 +309,7 @@ namespace boost { namespace phoenix return expression:: lambda:: - make(env(ctx), locals, map, lambda); + make(phoenix::env(ctx), locals, map, lambda); } }; diff --git a/3party/boost/boost/phoenix/scope/let.hpp b/3party/boost/boost/phoenix/scope/let.hpp index 5aa45e5998..8c84571512 100644 --- a/3party/boost/boost/phoenix/scope/let.hpp +++ b/3party/boost/boost/phoenix/scope/let.hpp @@ -174,7 +174,7 @@ namespace boost { namespace phoenix evaluator( proto::_ , _context - , proto::make + , proto::make ) > >() @@ -193,7 +193,7 @@ namespace boost { namespace phoenix ) > , proto::make< - int() + proto::empty_env() > ) >() diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp index 0d1a1455f6..333240e301 100644 --- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp +++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_10.hpp @@ -12,7 +12,7 @@ namespace boost { namespace phoenix { struct lambda_eval { - typedef void proto_is_callable_; + BOOST_PROTO_CALLABLE() template struct result; template < @@ -131,7 +131,7 @@ namespace boost { namespace phoenix ) > , proto::make< - int() + proto::empty_env() > ) > @@ -163,7 +163,7 @@ namespace boost { namespace phoenix evaluator( proto::_ , _context - , proto::make + , proto::make ) > >() @@ -217,9 +217,9 @@ namespace boost { namespace phoenix , typename Context > typename result< - lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context &) + lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context const &) >::type const - operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context & ctx) const + operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context const & ctx) const { typedef typename proto::detail::uncvref< @@ -252,7 +252,7 @@ namespace boost { namespace phoenix return expression:: lambda:: - make(env(ctx), locals, map, lambda); + make(phoenix::env(ctx), locals, map, lambda); } }; template diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp index 10041bb6db..7eefa43a98 100644 --- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp +++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_20.hpp @@ -12,7 +12,7 @@ namespace boost { namespace phoenix { struct lambda_eval { - typedef void proto_is_callable_; + BOOST_PROTO_CALLABLE() template struct result; template < @@ -131,7 +131,7 @@ namespace boost { namespace phoenix ) > , proto::make< - int() + proto::empty_env() > ) > @@ -163,7 +163,7 @@ namespace boost { namespace phoenix evaluator( proto::_ , _context - , proto::make + , proto::make ) > >() @@ -217,9 +217,9 @@ namespace boost { namespace phoenix , typename Context > typename result< - lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context &) + lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context const &) >::type const - operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context & ctx) const + operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context const & ctx) const { typedef typename proto::detail::uncvref< @@ -252,7 +252,7 @@ namespace boost { namespace phoenix return expression:: lambda:: - make(env(ctx), locals, map, lambda); + make(phoenix::env(ctx), locals, map, lambda); } }; template diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp index a9518d0200..e18d622153 100644 --- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp +++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_30.hpp @@ -12,7 +12,7 @@ namespace boost { namespace phoenix { struct lambda_eval { - typedef void proto_is_callable_; + BOOST_PROTO_CALLABLE() template struct result; template < @@ -131,7 +131,7 @@ namespace boost { namespace phoenix ) > , proto::make< - int() + proto::empty_env() > ) > @@ -163,7 +163,7 @@ namespace boost { namespace phoenix evaluator( proto::_ , _context - , proto::make + , proto::make ) > >() @@ -217,9 +217,9 @@ namespace boost { namespace phoenix , typename Context > typename result< - lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context &) + lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context const &) >::type const - operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context & ctx) const + operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context const & ctx) const { typedef typename proto::detail::uncvref< @@ -252,7 +252,7 @@ namespace boost { namespace phoenix return expression:: lambda:: - make(env(ctx), locals, map, lambda); + make(phoenix::env(ctx), locals, map, lambda); } }; template diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp index d8bc0707c0..c291c62dff 100644 --- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp +++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_40.hpp @@ -12,7 +12,7 @@ namespace boost { namespace phoenix { struct lambda_eval { - typedef void proto_is_callable_; + BOOST_PROTO_CALLABLE() template struct result; template < @@ -131,7 +131,7 @@ namespace boost { namespace phoenix ) > , proto::make< - int() + proto::empty_env() > ) > @@ -163,7 +163,7 @@ namespace boost { namespace phoenix evaluator( proto::_ , _context - , proto::make + , proto::make ) > >() @@ -217,9 +217,9 @@ namespace boost { namespace phoenix , typename Context > typename result< - lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context &) + lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context const &) >::type const - operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context & ctx) const + operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context const & ctx) const { typedef typename proto::detail::uncvref< @@ -252,7 +252,7 @@ namespace boost { namespace phoenix return expression:: lambda:: - make(env(ctx), locals, map, lambda); + make(phoenix::env(ctx), locals, map, lambda); } }; template diff --git a/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp b/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp index 28d4915de6..30f5fef3b2 100644 --- a/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp +++ b/3party/boost/boost/phoenix/scope/preprocessed/lambda_50.hpp @@ -12,7 +12,7 @@ namespace boost { namespace phoenix { struct lambda_eval { - typedef void proto_is_callable_; + BOOST_PROTO_CALLABLE() template struct result; template < @@ -131,7 +131,7 @@ namespace boost { namespace phoenix ) > , proto::make< - int() + proto::empty_env() > ) > @@ -163,7 +163,7 @@ namespace boost { namespace phoenix evaluator( proto::_ , _context - , proto::make + , proto::make ) > >() @@ -217,9 +217,9 @@ namespace boost { namespace phoenix , typename Context > typename result< - lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context &) + lambda_actor_eval(Vars const&, Map const &, Lambda const&, Context const &) >::type const - operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context & ctx) const + operator()(Vars const& vars, Map const& map, Lambda const& lambda, Context const & ctx) const { typedef typename proto::detail::uncvref< @@ -252,7 +252,7 @@ namespace boost { namespace phoenix return expression:: lambda:: - make(env(ctx), locals, map, lambda); + make(phoenix::env(ctx), locals, map, lambda); } }; template diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_10.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_10.hpp index d0d8b08fba..908e3f383a 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_10.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_10.hpp @@ -15,7 +15,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -38,7 +38,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -79,7 +79,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -102,7 +102,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -143,7 +143,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -166,7 +166,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -207,7 +207,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -230,7 +230,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -271,7 +271,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -294,7 +294,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -335,7 +335,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -358,7 +358,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -399,7 +399,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -422,7 +422,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -463,7 +463,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -486,7 +486,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -527,7 +527,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -550,7 +550,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_20.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_20.hpp index afde759202..81fcdf59e7 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_20.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_20.hpp @@ -15,7 +15,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -38,7 +38,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -79,7 +79,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -102,7 +102,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -143,7 +143,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -166,7 +166,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -207,7 +207,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -230,7 +230,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -271,7 +271,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -294,7 +294,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -335,7 +335,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -358,7 +358,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -399,7 +399,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -422,7 +422,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -463,7 +463,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -486,7 +486,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -527,7 +527,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -550,7 +550,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -591,7 +591,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -614,7 +614,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -655,7 +655,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -678,7 +678,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -719,7 +719,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -742,7 +742,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -783,7 +783,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -806,7 +806,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -847,7 +847,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -870,7 +870,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -911,7 +911,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -934,7 +934,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -975,7 +975,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -998,7 +998,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -1039,7 +1039,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1062,7 +1062,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1103,7 +1103,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1126,7 +1126,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1167,7 +1167,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> @@ -1190,7 +1190,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_30.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_30.hpp index 4d78449f2d..dcded02612 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_30.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_30.hpp @@ -15,7 +15,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -38,7 +38,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -79,7 +79,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -102,7 +102,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -143,7 +143,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -166,7 +166,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -207,7 +207,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -230,7 +230,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -271,7 +271,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -294,7 +294,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -335,7 +335,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -358,7 +358,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -399,7 +399,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -422,7 +422,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -463,7 +463,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -486,7 +486,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -527,7 +527,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -550,7 +550,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -591,7 +591,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -614,7 +614,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -655,7 +655,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -678,7 +678,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -719,7 +719,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -742,7 +742,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -783,7 +783,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -806,7 +806,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -847,7 +847,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -870,7 +870,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -911,7 +911,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -934,7 +934,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -975,7 +975,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -998,7 +998,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -1039,7 +1039,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1062,7 +1062,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1103,7 +1103,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1126,7 +1126,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1167,7 +1167,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> @@ -1190,7 +1190,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> @@ -1231,7 +1231,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<21> @@ -1254,7 +1254,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<21> @@ -1295,7 +1295,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<22> @@ -1318,7 +1318,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<22> @@ -1359,7 +1359,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<23> @@ -1382,7 +1382,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<23> @@ -1423,7 +1423,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<24> @@ -1446,7 +1446,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<24> @@ -1487,7 +1487,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<25> @@ -1510,7 +1510,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<25> @@ -1551,7 +1551,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<26> @@ -1574,7 +1574,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<26> @@ -1615,7 +1615,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<27> @@ -1638,7 +1638,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<27> @@ -1679,7 +1679,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<28> @@ -1702,7 +1702,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<28> @@ -1743,7 +1743,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<29> @@ -1766,7 +1766,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<29> @@ -1807,7 +1807,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<30> @@ -1830,7 +1830,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<30> diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_40.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_40.hpp index 13a64c9430..628bd42e74 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_40.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_40.hpp @@ -15,7 +15,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -38,7 +38,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -79,7 +79,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -102,7 +102,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -143,7 +143,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -166,7 +166,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -207,7 +207,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -230,7 +230,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -271,7 +271,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -294,7 +294,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -335,7 +335,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -358,7 +358,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -399,7 +399,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -422,7 +422,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -463,7 +463,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -486,7 +486,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -527,7 +527,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -550,7 +550,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -591,7 +591,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -614,7 +614,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -655,7 +655,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -678,7 +678,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -719,7 +719,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -742,7 +742,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -783,7 +783,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -806,7 +806,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -847,7 +847,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -870,7 +870,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -911,7 +911,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -934,7 +934,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -975,7 +975,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -998,7 +998,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -1039,7 +1039,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1062,7 +1062,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1103,7 +1103,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1126,7 +1126,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1167,7 +1167,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> @@ -1190,7 +1190,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> @@ -1231,7 +1231,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<21> @@ -1254,7 +1254,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<21> @@ -1295,7 +1295,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<22> @@ -1318,7 +1318,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<22> @@ -1359,7 +1359,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<23> @@ -1382,7 +1382,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<23> @@ -1423,7 +1423,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<24> @@ -1446,7 +1446,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<24> @@ -1487,7 +1487,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<25> @@ -1510,7 +1510,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<25> @@ -1551,7 +1551,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<26> @@ -1574,7 +1574,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<26> @@ -1615,7 +1615,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<27> @@ -1638,7 +1638,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<27> @@ -1679,7 +1679,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<28> @@ -1702,7 +1702,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<28> @@ -1743,7 +1743,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<29> @@ -1766,7 +1766,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<29> @@ -1807,7 +1807,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<30> @@ -1830,7 +1830,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<30> @@ -1871,7 +1871,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<31> @@ -1894,7 +1894,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<31> @@ -1935,7 +1935,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<32> @@ -1958,7 +1958,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<32> @@ -1999,7 +1999,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<33> @@ -2022,7 +2022,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<33> @@ -2063,7 +2063,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<34> @@ -2086,7 +2086,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<34> @@ -2127,7 +2127,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<35> @@ -2150,7 +2150,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<35> @@ -2191,7 +2191,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<36> @@ -2214,7 +2214,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<36> @@ -2255,7 +2255,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<37> @@ -2278,7 +2278,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<37> @@ -2319,7 +2319,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<38> @@ -2342,7 +2342,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<38> @@ -2383,7 +2383,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<39> @@ -2406,7 +2406,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<39> @@ -2447,7 +2447,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<40> @@ -2470,7 +2470,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<40> diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_50.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_50.hpp index f67b9b0ba7..2d4c148c65 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_50.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/switch_50.hpp @@ -15,7 +15,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -38,7 +38,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<2> @@ -79,7 +79,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -102,7 +102,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<3> @@ -143,7 +143,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -166,7 +166,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<4> @@ -207,7 +207,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -230,7 +230,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<5> @@ -271,7 +271,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -294,7 +294,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<6> @@ -335,7 +335,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -358,7 +358,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<7> @@ -399,7 +399,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -422,7 +422,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<8> @@ -463,7 +463,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -486,7 +486,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<9> @@ -527,7 +527,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -550,7 +550,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<10> @@ -591,7 +591,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -614,7 +614,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<11> @@ -655,7 +655,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -678,7 +678,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<12> @@ -719,7 +719,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -742,7 +742,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<13> @@ -783,7 +783,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -806,7 +806,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<14> @@ -847,7 +847,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -870,7 +870,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<15> @@ -911,7 +911,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -934,7 +934,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<16> @@ -975,7 +975,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -998,7 +998,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<17> @@ -1039,7 +1039,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1062,7 +1062,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<18> @@ -1103,7 +1103,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1126,7 +1126,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<19> @@ -1167,7 +1167,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> @@ -1190,7 +1190,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<20> @@ -1231,7 +1231,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<21> @@ -1254,7 +1254,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<21> @@ -1295,7 +1295,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<22> @@ -1318,7 +1318,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<22> @@ -1359,7 +1359,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<23> @@ -1382,7 +1382,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<23> @@ -1423,7 +1423,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<24> @@ -1446,7 +1446,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<24> @@ -1487,7 +1487,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<25> @@ -1510,7 +1510,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<25> @@ -1551,7 +1551,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<26> @@ -1574,7 +1574,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<26> @@ -1615,7 +1615,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<27> @@ -1638,7 +1638,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<27> @@ -1679,7 +1679,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<28> @@ -1702,7 +1702,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<28> @@ -1743,7 +1743,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<29> @@ -1766,7 +1766,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<29> @@ -1807,7 +1807,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<30> @@ -1830,7 +1830,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<30> @@ -1871,7 +1871,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<31> @@ -1894,7 +1894,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<31> @@ -1935,7 +1935,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<32> @@ -1958,7 +1958,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<32> @@ -1999,7 +1999,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<33> @@ -2022,7 +2022,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<33> @@ -2063,7 +2063,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<34> @@ -2086,7 +2086,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<34> @@ -2127,7 +2127,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<35> @@ -2150,7 +2150,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<35> @@ -2191,7 +2191,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<36> @@ -2214,7 +2214,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<36> @@ -2255,7 +2255,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<37> @@ -2278,7 +2278,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<37> @@ -2319,7 +2319,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<38> @@ -2342,7 +2342,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<38> @@ -2383,7 +2383,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<39> @@ -2406,7 +2406,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<39> @@ -2447,7 +2447,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<40> @@ -2470,7 +2470,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<40> @@ -2511,7 +2511,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<41> @@ -2534,7 +2534,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<41> @@ -2575,7 +2575,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<42> @@ -2598,7 +2598,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<42> @@ -2639,7 +2639,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<43> @@ -2662,7 +2662,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<43> @@ -2703,7 +2703,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<44> @@ -2726,7 +2726,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<44> @@ -2767,7 +2767,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<45> @@ -2790,7 +2790,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<45> @@ -2831,7 +2831,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<46> @@ -2854,7 +2854,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<46> @@ -2895,7 +2895,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<47> @@ -2918,7 +2918,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<47> @@ -2959,7 +2959,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<48> @@ -2982,7 +2982,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<48> @@ -3023,7 +3023,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<49> @@ -3046,7 +3046,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<49> @@ -3087,7 +3087,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<50> @@ -3110,7 +3110,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<50> diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp index e0054b0b48..473f3962a9 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp @@ -20,7 +20,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -36,7 +36,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -67,7 +67,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -83,7 +83,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -114,7 +114,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -130,7 +130,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -161,7 +161,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -177,7 +177,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -208,7 +208,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -224,7 +224,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -255,7 +255,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -271,7 +271,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -302,7 +302,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -318,7 +318,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -349,7 +349,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -365,7 +365,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -396,7 +396,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -412,7 +412,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -443,7 +443,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -459,7 +459,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp index 054aa9a415..711e36ac8a 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp @@ -20,7 +20,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -36,7 +36,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -67,7 +67,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -83,7 +83,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -114,7 +114,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -130,7 +130,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -161,7 +161,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -177,7 +177,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -208,7 +208,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -224,7 +224,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -255,7 +255,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -271,7 +271,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -302,7 +302,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -318,7 +318,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -349,7 +349,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -365,7 +365,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -396,7 +396,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -412,7 +412,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -443,7 +443,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -459,7 +459,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -490,7 +490,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -506,7 +506,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -537,7 +537,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -553,7 +553,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -584,7 +584,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -600,7 +600,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -631,7 +631,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -647,7 +647,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -678,7 +678,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -694,7 +694,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -725,7 +725,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -741,7 +741,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -772,7 +772,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -788,7 +788,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -819,7 +819,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -835,7 +835,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -866,7 +866,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -882,7 +882,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -913,7 +913,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { @@ -929,7 +929,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp index d416f8dda8..54028f31f2 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp @@ -20,7 +20,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -36,7 +36,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -67,7 +67,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -83,7 +83,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -114,7 +114,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -130,7 +130,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -161,7 +161,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -177,7 +177,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -208,7 +208,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -224,7 +224,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -255,7 +255,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -271,7 +271,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -302,7 +302,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -318,7 +318,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -349,7 +349,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -365,7 +365,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -396,7 +396,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -412,7 +412,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -443,7 +443,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -459,7 +459,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -490,7 +490,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -506,7 +506,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -537,7 +537,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -553,7 +553,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -584,7 +584,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -600,7 +600,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -631,7 +631,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -647,7 +647,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -678,7 +678,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -694,7 +694,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -725,7 +725,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -741,7 +741,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -772,7 +772,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -788,7 +788,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -819,7 +819,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -835,7 +835,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -866,7 +866,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -882,7 +882,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -913,7 +913,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { @@ -929,7 +929,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { @@ -960,7 +960,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context const & ctx) const { try { @@ -976,7 +976,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context const & ctx) const { try { @@ -1007,7 +1007,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context const & ctx) const { try { @@ -1023,7 +1023,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context const & ctx) const { try { @@ -1054,7 +1054,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context const & ctx) const { try { @@ -1070,7 +1070,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context const & ctx) const { try { @@ -1101,7 +1101,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context const & ctx) const { try { @@ -1117,7 +1117,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context const & ctx) const { try { @@ -1148,7 +1148,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context const & ctx) const { try { @@ -1164,7 +1164,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context const & ctx) const { try { @@ -1195,7 +1195,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context const & ctx) const { try { @@ -1211,7 +1211,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context const & ctx) const { try { @@ -1242,7 +1242,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context const & ctx) const { try { @@ -1258,7 +1258,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context const & ctx) const { try { @@ -1289,7 +1289,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context const & ctx) const { try { @@ -1305,7 +1305,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context const & ctx) const { try { @@ -1336,7 +1336,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context const & ctx) const { try { @@ -1352,7 +1352,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context const & ctx) const { try { @@ -1383,7 +1383,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context const & ctx) const { try { @@ -1399,7 +1399,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context const & ctx) const { try { diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp index a235ee5701..28f303eaf2 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp @@ -20,7 +20,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -36,7 +36,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -67,7 +67,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -83,7 +83,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -114,7 +114,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -130,7 +130,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -161,7 +161,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -177,7 +177,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -208,7 +208,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -224,7 +224,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -255,7 +255,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -271,7 +271,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -302,7 +302,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -318,7 +318,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -349,7 +349,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -365,7 +365,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -396,7 +396,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -412,7 +412,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -443,7 +443,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -459,7 +459,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -490,7 +490,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -506,7 +506,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -537,7 +537,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -553,7 +553,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -584,7 +584,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -600,7 +600,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -631,7 +631,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -647,7 +647,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -678,7 +678,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -694,7 +694,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -725,7 +725,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -741,7 +741,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -772,7 +772,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -788,7 +788,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -819,7 +819,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -835,7 +835,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -866,7 +866,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -882,7 +882,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -913,7 +913,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { @@ -929,7 +929,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { @@ -960,7 +960,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context const & ctx) const { try { @@ -976,7 +976,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context const & ctx) const { try { @@ -1007,7 +1007,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context const & ctx) const { try { @@ -1023,7 +1023,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context const & ctx) const { try { @@ -1054,7 +1054,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context const & ctx) const { try { @@ -1070,7 +1070,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context const & ctx) const { try { @@ -1101,7 +1101,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context const & ctx) const { try { @@ -1117,7 +1117,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context const & ctx) const { try { @@ -1148,7 +1148,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context const & ctx) const { try { @@ -1164,7 +1164,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context const & ctx) const { try { @@ -1195,7 +1195,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context const & ctx) const { try { @@ -1211,7 +1211,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context const & ctx) const { try { @@ -1242,7 +1242,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context const & ctx) const { try { @@ -1258,7 +1258,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context const & ctx) const { try { @@ -1289,7 +1289,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context const & ctx) const { try { @@ -1305,7 +1305,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context const & ctx) const { try { @@ -1336,7 +1336,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context const & ctx) const { try { @@ -1352,7 +1352,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context const & ctx) const { try { @@ -1383,7 +1383,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context const & ctx) const { try { @@ -1399,7 +1399,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context const & ctx) const { try { @@ -1430,7 +1430,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context const & ctx) const { try { @@ -1446,7 +1446,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context const & ctx) const { try { @@ -1477,7 +1477,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context const & ctx) const { try { @@ -1493,7 +1493,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context const & ctx) const { try { @@ -1524,7 +1524,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context const & ctx) const { try { @@ -1540,7 +1540,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context const & ctx) const { try { @@ -1571,7 +1571,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context const & ctx) const { try { @@ -1587,7 +1587,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context const & ctx) const { try { @@ -1618,7 +1618,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context const & ctx) const { try { @@ -1634,7 +1634,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context const & ctx) const { try { @@ -1665,7 +1665,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context const & ctx) const { try { @@ -1681,7 +1681,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context const & ctx) const { try { @@ -1712,7 +1712,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context const & ctx) const { try { @@ -1728,7 +1728,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context const & ctx) const { try { @@ -1759,7 +1759,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context const & ctx) const { try { @@ -1775,7 +1775,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context const & ctx) const { try { @@ -1806,7 +1806,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context const & ctx) const { try { @@ -1822,7 +1822,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context const & ctx) const { try { @@ -1853,7 +1853,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context const & ctx) const { try { @@ -1869,7 +1869,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context const & ctx) const { try { diff --git a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp index 5cf33cd1ff..b6acd62d9a 100644 --- a/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp +++ b/3party/boost/boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp @@ -20,7 +20,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -36,7 +36,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0, Context & ctx) const + operator()(Try const & try_, A0 const& a0, Context const & ctx) const { try { @@ -67,7 +67,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -83,7 +83,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1, Context const & ctx) const { try { @@ -114,7 +114,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -130,7 +130,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2, Context const & ctx) const { try { @@ -161,7 +161,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -177,7 +177,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3, Context const & ctx) const { try { @@ -208,7 +208,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -224,7 +224,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4, Context const & ctx) const { try { @@ -255,7 +255,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -271,7 +271,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5, Context const & ctx) const { try { @@ -302,7 +302,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -318,7 +318,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6, Context const & ctx) const { try { @@ -349,7 +349,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -365,7 +365,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7, Context const & ctx) const { try { @@ -396,7 +396,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -412,7 +412,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8, Context const & ctx) const { try { @@ -443,7 +443,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -459,7 +459,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9, Context const & ctx) const { try { @@ -490,7 +490,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -506,7 +506,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10, Context const & ctx) const { try { @@ -537,7 +537,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -553,7 +553,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11, Context const & ctx) const { try { @@ -584,7 +584,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -600,7 +600,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12, Context const & ctx) const { try { @@ -631,7 +631,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -647,7 +647,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13, Context const & ctx) const { try { @@ -678,7 +678,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -694,7 +694,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14, Context const & ctx) const { try { @@ -725,7 +725,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -741,7 +741,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15, Context const & ctx) const { try { @@ -772,7 +772,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -788,7 +788,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16, Context const & ctx) const { try { @@ -819,7 +819,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -835,7 +835,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17, Context const & ctx) const { try { @@ -866,7 +866,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -882,7 +882,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18, Context const & ctx) const { try { @@ -913,7 +913,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { @@ -929,7 +929,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19, Context const & ctx) const { try { @@ -960,7 +960,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context const & ctx) const { try { @@ -976,7 +976,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20, Context const & ctx) const { try { @@ -1007,7 +1007,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context const & ctx) const { try { @@ -1023,7 +1023,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21, Context const & ctx) const { try { @@ -1054,7 +1054,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context const & ctx) const { try { @@ -1070,7 +1070,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22, Context const & ctx) const { try { @@ -1101,7 +1101,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context const & ctx) const { try { @@ -1117,7 +1117,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23, Context const & ctx) const { try { @@ -1148,7 +1148,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context const & ctx) const { try { @@ -1164,7 +1164,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24, Context const & ctx) const { try { @@ -1195,7 +1195,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context const & ctx) const { try { @@ -1211,7 +1211,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25, Context const & ctx) const { try { @@ -1242,7 +1242,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context const & ctx) const { try { @@ -1258,7 +1258,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26, Context const & ctx) const { try { @@ -1289,7 +1289,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context const & ctx) const { try { @@ -1305,7 +1305,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27, Context const & ctx) const { try { @@ -1336,7 +1336,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context const & ctx) const { try { @@ -1352,7 +1352,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28, Context const & ctx) const { try { @@ -1383,7 +1383,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context const & ctx) const { try { @@ -1399,7 +1399,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29, Context const & ctx) const { try { @@ -1430,7 +1430,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context const & ctx) const { try { @@ -1446,7 +1446,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30, Context const & ctx) const { try { @@ -1477,7 +1477,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context const & ctx) const { try { @@ -1493,7 +1493,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31, Context const & ctx) const { try { @@ -1524,7 +1524,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context const & ctx) const { try { @@ -1540,7 +1540,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32, Context const & ctx) const { try { @@ -1571,7 +1571,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context const & ctx) const { try { @@ -1587,7 +1587,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33, Context const & ctx) const { try { @@ -1618,7 +1618,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context const & ctx) const { try { @@ -1634,7 +1634,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34, Context const & ctx) const { try { @@ -1665,7 +1665,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context const & ctx) const { try { @@ -1681,7 +1681,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35, Context const & ctx) const { try { @@ -1712,7 +1712,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context const & ctx) const { try { @@ -1728,7 +1728,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36, Context const & ctx) const { try { @@ -1759,7 +1759,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context const & ctx) const { try { @@ -1775,7 +1775,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37, Context const & ctx) const { try { @@ -1806,7 +1806,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context const & ctx) const { try { @@ -1822,7 +1822,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38, Context const & ctx) const { try { @@ -1853,7 +1853,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context const & ctx) const { try { @@ -1869,7 +1869,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39, Context const & ctx) const { try { @@ -1900,7 +1900,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40, Context const & ctx) const { try { @@ -1916,7 +1916,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40, Context const & ctx) const { try { @@ -1947,7 +1947,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41, Context const & ctx) const { try { @@ -1963,7 +1963,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41, Context const & ctx) const { try { @@ -1994,7 +1994,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42, Context const & ctx) const { try { @@ -2010,7 +2010,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42, Context const & ctx) const { try { @@ -2041,7 +2041,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43, Context const & ctx) const { try { @@ -2057,7 +2057,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43, Context const & ctx) const { try { @@ -2088,7 +2088,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44, Context const & ctx) const { try { @@ -2104,7 +2104,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44, Context const & ctx) const { try { @@ -2135,7 +2135,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45, Context const & ctx) const { try { @@ -2151,7 +2151,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45, Context const & ctx) const { try { @@ -2182,7 +2182,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46, Context const & ctx) const { try { @@ -2198,7 +2198,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46, Context const & ctx) const { try { @@ -2229,7 +2229,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47, Context const & ctx) const { try { @@ -2245,7 +2245,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47, Context const & ctx) const { try { @@ -2276,7 +2276,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48, Context const & ctx) const { try { @@ -2292,7 +2292,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48, Context const & ctx) const { try { @@ -2323,7 +2323,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48 , A49 const& a49, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48 , A49 const& a49, Context const & ctx) const { try { @@ -2339,7 +2339,7 @@ > , result_type >::type - operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48 , A49 const& a49, Context & ctx) const + operator()(Try const & try_, A0 const& a0 , A1 const& a1 , A2 const& a2 , A3 const& a3 , A4 const& a4 , A5 const& a5 , A6 const& a6 , A7 const& a7 , A8 const& a8 , A9 const& a9 , A10 const& a10 , A11 const& a11 , A12 const& a12 , A13 const& a13 , A14 const& a14 , A15 const& a15 , A16 const& a16 , A17 const& a17 , A18 const& a18 , A19 const& a19 , A20 const& a20 , A21 const& a21 , A22 const& a22 , A23 const& a23 , A24 const& a24 , A25 const& a25 , A26 const& a26 , A27 const& a27 , A28 const& a28 , A29 const& a29 , A30 const& a30 , A31 const& a31 , A32 const& a32 , A33 const& a33 , A34 const& a34 , A35 const& a35 , A36 const& a36 , A37 const& a37 , A38 const& a38 , A39 const& a39 , A40 const& a40 , A41 const& a41 , A42 const& a42 , A43 const& a43 , A44 const& a44 , A45 const& a45 , A46 const& a46 , A47 const& a47 , A48 const& a48 , A49 const& a49, Context const & ctx) const { try { diff --git a/3party/boost/boost/phoenix/statement/detail/switch.hpp b/3party/boost/boost/phoenix/statement/detail/switch.hpp index 0034fe1a00..a97b78749f 100644 --- a/3party/boost/boost/phoenix/statement/detail/switch.hpp +++ b/3party/boost/boost/phoenix/statement/detail/switch.hpp @@ -85,7 +85,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_ @@ -117,7 +117,7 @@ template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_ diff --git a/3party/boost/boost/phoenix/statement/detail/try_catch_eval.hpp b/3party/boost/boost/phoenix/statement/detail/try_catch_eval.hpp index 0bd015f7c7..07cbf69ca7 100644 --- a/3party/boost/boost/phoenix/statement/detail/try_catch_eval.hpp +++ b/3party/boost/boost/phoenix/statement/detail/try_catch_eval.hpp @@ -71,7 +71,7 @@ > , result_type >::type - operator()(Try const & try_, BOOST_PHOENIX_A_const_ref_a, Context & ctx) const + operator()(Try const & try_, BOOST_PHOENIX_A_const_ref_a, Context const & ctx) const { try { @@ -88,7 +88,7 @@ > , result_type >::type - operator()(Try const & try_, BOOST_PHOENIX_A_const_ref_a, Context & ctx) const + operator()(Try const & try_, BOOST_PHOENIX_A_const_ref_a, Context const & ctx) const { try { diff --git a/3party/boost/boost/phoenix/statement/do_while.hpp b/3party/boost/boost/phoenix/statement/do_while.hpp index abc10ba63f..d9b5361451 100644 --- a/3party/boost/boost/phoenix/statement/do_while.hpp +++ b/3party/boost/boost/phoenix/statement/do_while.hpp @@ -27,7 +27,7 @@ namespace boost { namespace phoenix template result_type - operator()(Cond const& cond, Do const& do_, Context & ctx) const + operator()(Cond const& cond, Do const& do_, Context const & ctx) const { do boost::phoenix::eval(do_, ctx); diff --git a/3party/boost/boost/phoenix/statement/for.hpp b/3party/boost/boost/phoenix/statement/for.hpp index 9cb464b4b0..e98a1dc69d 100644 --- a/3party/boost/boost/phoenix/statement/for.hpp +++ b/3party/boost/boost/phoenix/statement/for.hpp @@ -40,7 +40,7 @@ namespace boost { namespace phoenix , Cond const& cond , Step const& step , Do const& do_ - , Context & ctx + , Context const & ctx ) const { for(boost::phoenix::eval(init, ctx); boost::phoenix::eval(cond, ctx); boost::phoenix::eval(step, ctx)) diff --git a/3party/boost/boost/phoenix/statement/if.hpp b/3party/boost/boost/phoenix/statement/if.hpp index 2819ef386c..e9e9334db8 100644 --- a/3party/boost/boost/phoenix/statement/if.hpp +++ b/3party/boost/boost/phoenix/statement/if.hpp @@ -56,7 +56,7 @@ namespace boost { namespace phoenix template result_type - operator()(Cond const & cond, Then const & then, Context & ctx) const + operator()(Cond const & cond, Then const & then, Context const & ctx) const { if(boost::phoenix::eval(cond, ctx)) boost::phoenix::eval(then, ctx); diff --git a/3party/boost/boost/phoenix/statement/switch.hpp b/3party/boost/boost/phoenix/statement/switch.hpp index eb4f75b605..d101c03c6f 100644 --- a/3party/boost/boost/phoenix/statement/switch.hpp +++ b/3party/boost/boost/phoenix/statement/switch.hpp @@ -18,6 +18,11 @@ #include #include +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4065) // switch statement contains 'default' but no 'case' labels +#endif + BOOST_PHOENIX_DEFINE_EXPRESSION( (boost)(phoenix)(switch_case) , (proto::terminal) @@ -124,20 +129,20 @@ namespace boost { namespace phoenix { template result_type - operator()(Context &) const + operator()(Context const &) const { } template result_type - operator()(Cond const & cond, Cases const & cases, Context & ctx) const + operator()(Cond const & cond, Cases const & cases, Context const & ctx) const { this->evaluate( ctx , cond , cases - , typename detail::switch_size::impl::result_type() - , typename detail::switch_grammar::impl::result_type() + , typename detail::switch_size::impl::result_type() + , typename detail::switch_grammar::impl::result_type() ); } @@ -145,7 +150,7 @@ namespace boost { namespace phoenix { template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<1> @@ -171,7 +176,7 @@ namespace boost { namespace phoenix { template result_type evaluate( - Context & ctx + Context const & ctx , Cond const & cond , Cases const & cases , mpl::int_<1> @@ -287,5 +292,9 @@ namespace boost { namespace phoenix { }} +#ifdef _MSC_VER +#pragma warning(pop) +#endif + #endif diff --git a/3party/boost/boost/phoenix/statement/throw.hpp b/3party/boost/boost/phoenix/statement/throw.hpp index 2ed6ad0f1c..373a09bf0a 100644 --- a/3party/boost/boost/phoenix/statement/throw.hpp +++ b/3party/boost/boost/phoenix/statement/throw.hpp @@ -50,7 +50,7 @@ namespace boost { namespace phoenix template result_type - operator()(ThrowExpr const& throw_expr, Context & ctx) const + operator()(ThrowExpr const& throw_expr, Context const & ctx) const { throw boost::phoenix::eval(throw_expr, ctx); } diff --git a/3party/boost/boost/phoenix/statement/try_catch.hpp b/3party/boost/boost/phoenix/statement/try_catch.hpp index 921a9ca989..d3e40cf524 100644 --- a/3party/boost/boost/phoenix/statement/try_catch.hpp +++ b/3party/boost/boost/phoenix/statement/try_catch.hpp @@ -17,6 +17,11 @@ #include #include +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4355) // 'this' : used in base member initializer list +#endif + namespace boost { namespace phoenix { template @@ -101,6 +106,10 @@ namespace boost { namespace phoenix { typedef void result_type; + template + void operator()(Try const &, Context const &) const + {} + // bring in the operator overloads #include }; @@ -120,7 +129,7 @@ namespace boost { namespace phoenix evaluator( proto::_child_c<0> , proto::_data - , proto::make + , proto::make ) > > @@ -130,7 +139,7 @@ namespace boost { namespace phoenix evaluator( proto::_child_c<1> , proto::_data - , proto::make + , proto::make ) > > @@ -142,7 +151,7 @@ namespace boost { namespace phoenix evaluator( proto::_child_c<0> , proto::_data - , proto::make + , proto::make ) > , proto::fold< @@ -156,7 +165,7 @@ namespace boost { namespace phoenix , proto::call< try_catch_is_nullary( proto::_ - , proto::make + , proto::make , proto::_data ) > @@ -256,7 +265,7 @@ namespace boost { namespace phoenix : proto::call< detail::try_catch_is_nullary( proto::_ - , proto::make + , proto::make , _context ) > @@ -358,4 +367,8 @@ namespace boost { namespace phoenix #endif }} +#ifdef _MSC_VER +#pragma warning(pop) +#endif + #endif diff --git a/3party/boost/boost/phoenix/statement/while.hpp b/3party/boost/boost/phoenix/statement/while.hpp index a996f25efb..d9294e033a 100644 --- a/3party/boost/boost/phoenix/statement/while.hpp +++ b/3party/boost/boost/phoenix/statement/while.hpp @@ -27,7 +27,7 @@ namespace boost { namespace phoenix template result_type - operator()(Cond const& cond, Do const& do_, Context & ctx) const + operator()(Cond const& cond, Do const& do_, Context const & ctx) const { while(boost::phoenix::eval(cond, ctx)) { diff --git a/3party/boost/boost/phoenix/stl/container/container.hpp b/3party/boost/boost/phoenix/stl/container/container.hpp index 20d45229af..941d449e0f 100644 --- a/3party/boost/boost/phoenix/stl/container/container.hpp +++ b/3party/boost/boost/phoenix/stl/container/container.hpp @@ -349,18 +349,40 @@ namespace boost { namespace phoenix {}; template - typename result_of::erase::type + typename stl_impl::disable_if_is_void< + typename result_of::erase::type + >::type operator()(C& c, Arg1 arg1) const { return c.erase(arg1); } + template + typename stl_impl::enable_if_is_void< + typename result_of::erase::type + >::type + operator()(C& c, Arg1 arg1) const + { + c.erase(arg1); + } + template - typename result_of::erase::type + typename stl_impl::disable_if_is_void< + typename result_of::erase::type + >::type operator()(C& c, Arg1 arg1, Arg2 arg2) const { return c.erase(arg1, arg2); } + + template + typename stl_impl::enable_if_is_void< + typename result_of::erase::type + >::type + operator()(C& c, Arg1 arg1, Arg2 arg2) const + { + c.erase(arg1, arg2); + } }; struct front @@ -512,19 +534,42 @@ namespace boost { namespace phoenix } template - typename result::type + typename stl_impl::disable_if_is_void< + typename result::type + >::type operator()(C& c, Arg1 arg1, Arg2 arg2) const { return c.insert(arg1, arg2); } + template + typename stl_impl::enable_if_is_void< + typename result::type + >::type + operator()(C& c, Arg1 arg1, Arg2 arg2) const + { + c.insert(arg1, arg2); + } + template - typename result::type + typename stl_impl::disable_if_is_void< + typename result::type + >::type operator()( C& c, Arg1 arg1, Arg2 arg2, Arg3 arg3) const { return c.insert(arg1, arg2, arg3); } + + template + typename stl_impl::enable_if_is_void< + typename result::type + >::type + operator()( + C& c, Arg1 arg1, Arg2 arg2, Arg3 arg3) const + { + c.insert(arg1, arg2, arg3); + } }; namespace result_of @@ -666,7 +711,7 @@ namespace boost { namespace phoenix template void operator()(C& c, Arg const& count) const { - return c.reserve(count); + c.reserve(count); } }; @@ -677,13 +722,13 @@ namespace boost { namespace phoenix template void operator()(C& c, Arg1 const& arg1) const { - return c.resize(arg1); + c.resize(arg1); } template void operator()(C& c, Arg1 const& arg1, Arg2 const& arg2) const { - return c.resize(arg1, arg2); + c.resize(arg1, arg2); } }; diff --git a/3party/boost/boost/phoenix/stl/container/detail/container.hpp b/3party/boost/boost/phoenix/stl/container/detail/container.hpp index fb6cad2fe9..bca98f43cb 100644 --- a/3party/boost/boost/phoenix/stl/container/detail/container.hpp +++ b/3party/boost/boost/phoenix/stl/container/detail/container.hpp @@ -124,6 +124,26 @@ namespace boost { namespace phoenix { namespace stl template two has_mapped_type(...); + + template + struct enable_if_is_void + {}; + + template<> + struct enable_if_is_void + { + typedef void type; + }; + + template + struct disable_if_is_void + { + typedef T type; + }; + + template<> + struct disable_if_is_void + {}; } template diff --git a/3party/boost/boost/polygon/detail/boolean_op.hpp b/3party/boost/boost/polygon/detail/boolean_op.hpp index 400825eb1f..d3e3614fe5 100644 --- a/3party/boost/boost/polygon/detail/boolean_op.hpp +++ b/3party/boost/boost/polygon/detail/boolean_op.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -30,8 +30,8 @@ namespace boolean_op { inline BooleanOp (T nullT) : scanData_(), nextItr_(), nullT_(nullT) { nextItr_ = scanData_.end(); } inline BooleanOp (const BooleanOp& that) : scanData_(that.scanData_), nextItr_(), nullT_(that.nullT_) { nextItr_ = scanData_.begin(); } - inline BooleanOp& operator=(const BooleanOp& that); - + inline BooleanOp& operator=(const BooleanOp& that); + //moves scanline forward inline void advanceScan() { nextItr_ = scanData_.begin(); } @@ -39,7 +39,7 @@ namespace boolean_op { //appends output edges to cT template inline void processInterval(cT& outputContainer, interval_data ivl, T deltaCount); - + private: inline typename ScanData::iterator lookup_(Unit pos){ if(nextItr_ != scanData_.end() && nextItr_->first >= pos) { @@ -47,9 +47,9 @@ namespace boolean_op { } return nextItr_ = scanData_.lower_bound(pos); } - inline typename ScanData::iterator insert_(Unit pos, T count){ - return nextItr_ = scanData_.insert(nextItr_, ElementType(pos, count)); - } + inline typename ScanData::iterator insert_(Unit pos, T count){ + return nextItr_ = scanData_.insert(nextItr_, ElementType(pos, count)); + } template inline void evaluateInterval_(cT& outputContainer, interval_data ivl, T beforeCount, T afterCount); }; @@ -78,29 +78,29 @@ namespace boolean_op { //BinaryCount is an array of two deltaCounts coming from two different layers //of scan event data. It is the merged count of the two suitable for consumption //as the template argument of the BooleanOp algorithm because BinaryCount casts to int. - //T is a binary functor object that evaluates the array of counts and returns a logical + //T is a binary functor object that evaluates the array of counts and returns a logical //result of some operation on those values. //BinaryCount supports many of the operators that work with int, particularly the //binary operators, but cannot support less than or increment. template class BinaryCount { public: - inline BinaryCount() -#ifndef BOOST_POLYGON_MSVC - : counts_() + inline BinaryCount() +#ifndef BOOST_POLYGON_MSVC + : counts_() #endif { counts_[0] = counts_[1] = 0; } // constructs from two integers - inline BinaryCount(int countL, int countR) -#ifndef BOOST_POLYGON_MSVC - : counts_() + inline BinaryCount(int countL, int countR) +#ifndef BOOST_POLYGON_MSVC + : counts_() #endif { counts_[0] = countL, counts_[1] = countR; } inline BinaryCount& operator=(int count) { counts_[0] = count, counts_[1] = count; return *this; } - inline BinaryCount& operator=(const BinaryCount& that); + inline BinaryCount& operator=(const BinaryCount& that); inline BinaryCount(const BinaryCount& that) #ifndef BOOST_POLYGON_MSVC - : counts_() + : counts_() #endif { *this = that; } inline bool operator==(const BinaryCount& that) const; @@ -141,13 +141,13 @@ namespace boolean_op { }; template - inline BooleanOp& BooleanOp::operator=(const BooleanOp& that) { - scanData_ = that.scanData_; + inline BooleanOp& BooleanOp::operator=(const BooleanOp& that) { + scanData_ = that.scanData_; nextItr_ = scanData_.begin(); nullT_ = that.nullT_; return *this; } - + //appends output edges to cT template template @@ -214,7 +214,7 @@ namespace boolean_op { template template - inline void BooleanOp::evaluateInterval_(cT& outputContainer, interval_data ivl, + inline void BooleanOp::evaluateInterval_(cT& outputContainer, interval_data ivl, T beforeCount, T afterCount) { bool before = (int)beforeCount > 0; bool after = (int)afterCount > 0; @@ -225,13 +225,13 @@ namespace boolean_op { } template - inline BinaryCount& BinaryCount::operator=(const BinaryCount& that) { + inline BinaryCount& BinaryCount::operator=(const BinaryCount& that) { counts_[0] = that.counts_[0]; counts_[1] = that.counts_[1]; return *this; } template - inline bool BinaryCount::operator==(const BinaryCount& that) const { + inline bool BinaryCount::operator==(const BinaryCount& that) const { return counts_[0] == that.counts_[0] && counts_[1] == that.counts_[1]; } @@ -290,7 +290,7 @@ namespace boolean_op { count[0] += (*itr1).second.second; } if(itr2 != itr2_end) { - if((*itr2).first < prevCoord || + if((*itr2).first < prevCoord || ((*itr2).first == prevCoord && (*itr2).second.first < prevPosition)) { prevCoord = (*itr2).first; prevPosition = (*itr2).second.first; @@ -307,7 +307,7 @@ namespace boolean_op { } else { if(itr1 != itr1_end) ++itr1; } - + while(itr1 != itr1_end || itr2 != itr2_end) { Unit curCoord = UnitMax; Unit curPosition = UnitMax; @@ -318,7 +318,7 @@ namespace boolean_op { curCount[0] += (*itr1).second.second; } if(itr2 != itr2_end) { - if((*itr2).first < curCoord || + if((*itr2).first < curCoord || ((*itr2).first == curCoord && (*itr2).second.first < curPosition)) { curCoord = (*itr2).first; curPosition = (*itr2).second.first; @@ -349,15 +349,15 @@ namespace boolean_op { boolean.processInterval(container, ivl, count); for(std::size_t i = 0; i < container.size(); ++i) { std::pair, int>& element = container[i]; - if(!output.empty() && output.back().first == prevCoord && + if(!output.empty() && output.back().first == prevCoord && output.back().second.first == element.first.low() && output.back().second.second == element.second * -1) { output.pop_back(); } else { - output.push_back(std::pair >(prevCoord, std::pair(element.first.low(), + output.push_back(std::pair >(prevCoord, std::pair(element.first.low(), element.second))); } - output.push_back(std::pair >(prevCoord, std::pair(element.first.high(), + output.push_back(std::pair >(prevCoord, std::pair(element.first.high(), element.second * -1))); } } @@ -379,11 +379,11 @@ namespace boolean_op { } inputOutput.insert(inputOutput.end(), output.begin(), output.end()); } - + template inline void applyUnaryXOr(std::vector > >& input) { BooleanOp booleanXOr; - + } template @@ -416,15 +416,15 @@ namespace boolean_op { booleanOr.processInterval(container, ivl, count_type(count)); for(std::size_t i = 0; i < container.size(); ++i) { std::pair, int>& element = container[i]; - if(!output.empty() && output.back().first == prevPos && + if(!output.empty() && output.back().first == prevPos && output.back().second.first == element.first.low() && output.back().second.second == element.second * -1) { output.pop_back(); } else { - output.push_back(std::pair >(prevPos, std::pair(element.first.low(), + output.push_back(std::pair >(prevPos, std::pair(element.first.low(), element.second))); } - output.push_back(std::pair >(prevPos, std::pair(element.first.high(), + output.push_back(std::pair >(prevPos, std::pair(element.first.high(), element.second * -1))); } } @@ -435,7 +435,7 @@ namespace boolean_op { input = std::vector > >(); } else { input.clear(); - } + } input.insert(input.end(), output.begin(), output.end()); } }; diff --git a/3party/boost/boost/polygon/detail/boolean_op_45.hpp b/3party/boost/boost/polygon/detail/boolean_op_45.hpp index b4a82d8633..fd64effe88 100644 --- a/3party/boost/boost/polygon/detail/boolean_op_45.hpp +++ b/3party/boost/boost/polygon/detail/boolean_op_45.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -16,20 +16,20 @@ namespace boost { namespace polygon{ class Count2 { public: - inline Count2() -#ifndef BOOST_POLYGON_MSVC - : counts() + inline Count2() +#ifndef BOOST_POLYGON_MSVC + : counts() #endif { counts[0] = counts[1] = 0; } //inline Count2(int count) { counts[0] = counts[1] = count; } - inline Count2(int count1, int count2) -#ifndef BOOST_POLYGON_MSVC - : counts() + inline Count2(int count1, int count2) +#ifndef BOOST_POLYGON_MSVC + : counts() #endif { counts[0] = count1; counts[1] = count2; } - inline Count2(const Count2& count) -#ifndef BOOST_POLYGON_MSVC - : counts() + inline Count2(const Count2& count) +#ifndef BOOST_POLYGON_MSVC + : counts() #endif { counts[0] = count.counts[0]; counts[1] = count.counts[1]; } inline bool operator==(const Count2& count) const { return counts[0] == count.counts[0] && counts[1] == count.counts[1]; } @@ -108,7 +108,7 @@ namespace boost { namespace polygon{ inline Scan45ElementT(const Scan45ElementT& that) : x(that.x), y(that.y), rise(that.rise), count(that.count) {} inline Scan45ElementT& operator=(const Scan45ElementT& that) { - x = that.x; y = that.y; rise = that.rise; count = that.count; + x = that.x; y = that.y; rise = that.rise; count = that.count; return *this; } inline Unit evalAtX(Unit xIn) const { @@ -142,7 +142,7 @@ namespace boost { namespace polygon{ return true; } }; - + typedef Scan45ElementT Scan45Element; // inline std::ostream& operator<< (std::ostream& o, const Scan45Element& c) { @@ -168,7 +168,7 @@ namespace boost { namespace polygon{ inline lessScan45Element(Unit *x, int *justBefore) : x_(x), justBefore_(justBefore) {} inline lessScan45Element(const lessScan45Element& that) : x_(that.x_), justBefore_(that.justBefore_) {} inline lessScan45Element& operator=(const lessScan45Element& that) { x_ = that.x_; justBefore_ = that.justBefore_; return *this; } - inline bool operator () (const Scan45ElementT& elm1, + inline bool operator () (const Scan45ElementT& elm1, const Scan45ElementT& elm2) const { Unit y1 = elm1.evalAtX(*x_); Unit y2 = elm2.evalAtX(*x_); @@ -190,42 +190,42 @@ namespace boost { namespace polygon{ public: inline Scan45CountT() : counts() {} //counts[0] = counts[1] = counts[2] = counts[3] = 0; } inline Scan45CountT(CountType count) : counts() { counts[0] = counts[1] = counts[2] = counts[3] = count; } - inline Scan45CountT(const CountType& count1, const CountType& count2, const CountType& count3, - const CountType& count4) : counts() { - counts[0] = count1; - counts[1] = count2; + inline Scan45CountT(const CountType& count1, const CountType& count2, const CountType& count3, + const CountType& count4) : counts() { + counts[0] = count1; + counts[1] = count2; counts[2] = count3; - counts[3] = count4; + counts[3] = count4; } - inline Scan45CountT(const Scan45CountT& count) : counts() { + inline Scan45CountT(const Scan45CountT& count) : counts() { (*this) = count; } - inline bool operator==(const Scan45CountT& count) const { + inline bool operator==(const Scan45CountT& count) const { for(unsigned int i = 0; i < 4; ++i) { - if(counts[i] != count.counts[i]) return false; + if(counts[i] != count.counts[i]) return false; } return true; } inline bool operator!=(const Scan45CountT& count) const { return !((*this) == count); } - inline Scan45CountT& operator=(CountType count) { + inline Scan45CountT& operator=(CountType count) { counts[0] = counts[1] = counts[2] = counts[3] = count; return *this; } inline Scan45CountT& operator=(const Scan45CountT& count) { for(unsigned int i = 0; i < 4; ++i) { - counts[i] = count.counts[i]; + counts[i] = count.counts[i]; } - return *this; + return *this; } inline CountType& operator[](int index) { return counts[index]; } inline CountType operator[](int index) const {return counts[index]; } inline Scan45CountT& operator+=(const Scan45CountT& count){ for(unsigned int i = 0; i < 4; ++i) { - counts[i] += count.counts[i]; + counts[i] += count.counts[i]; } return *this; } inline Scan45CountT& operator-=(const Scan45CountT& count){ for(unsigned int i = 0; i < 4; ++i) { - counts[i] -= count.counts[i]; + counts[i] -= count.counts[i]; } return *this; } @@ -270,7 +270,7 @@ namespace boost { namespace polygon{ inline Vertex45T() : pt(), rise(), count() {} inline Vertex45T(const Point& point, int riseIn, ct countIn) : pt(point), rise(riseIn), count(countIn) {} inline Vertex45T(const Vertex45T& vertex) : pt(vertex.pt), rise(vertex.rise), count(vertex.count) {} - inline Vertex45T& operator=(const Vertex45T& vertex){ + inline Vertex45T& operator=(const Vertex45T& vertex){ pt = vertex.pt; rise = vertex.rise; count = vertex.count; return *this; } inline Vertex45T(const std::pair& vertex) : pt(), rise(), count() {} inline Vertex45T& operator=(const std::pair& vertex){ return *this; } @@ -307,13 +307,13 @@ namespace boost { namespace polygon{ int *justBefore_; public: inline lessVertex45() : x_(0), justBefore_() {} - + inline lessVertex45(Unit *x, int *justBefore) : x_(x), justBefore_(justBefore) {} - + inline lessVertex45(const lessVertex45& that) : x_(that.x_), justBefore_(that.justBefore_) {} - + inline lessVertex45& operator=(const lessVertex45& that) { x_ = that.x_; justBefore_ = that.justBefore_; return *this; } - + template inline bool operator () (const Vertex45T& elm1, const Vertex45T& elm2) const { Unit y1 = elm1.evalAtX(*x_); @@ -390,7 +390,7 @@ namespace boost { namespace polygon{ template struct boolean_op_45_output_functor { template - void operator()(cT& output, const Count2& count1, const Count2& count2, + void operator()(cT& output, const Count2& count1, const Count2& count2, const Point& pt, int rise, direction_1d end) { int edgeType = applyLogic(count1, count2); if(edgeType) { @@ -423,7 +423,7 @@ namespace boost { namespace polygon{ template struct unary_op_45_output_functor { template - void operator()(cT& output, const Count1& count1, const Count1& count2, + void operator()(cT& output, const Count1& count1, const Count1& count2, const Point& pt, int rise, direction_1d end) { int edgeType = applyLogic(count1, count2); if(edgeType) { @@ -445,7 +445,7 @@ namespace boost { namespace polygon{ }; template static inline void sortScan45Vector(S45V& vec) { - gtlsort(vec.begin(), vec.end(), lessScan45Vertex()); + polygon_sort(vec.begin(), vec.end(), lessScan45Vertex()); } template @@ -453,12 +453,12 @@ namespace boost { namespace polygon{ public: typedef Scan45CountT Scan45Count; typedef std::pair Scan45Vertex; - + //index is the index into the vertex static inline Scan45Element getElement(const Scan45Vertex& vertex, int index) { return Scan45Element(vertex.first.x(), vertex.first.y(), index - 1, vertex.second[index]); } - + class lessScan45Point : public std::binary_function { public: inline lessScan45Point() {} //default constructor is only constructor @@ -466,7 +466,7 @@ namespace boost { namespace polygon{ return (v1.x() < v2.x()) || (v1.x() == v2.x() && v1.y() < v2.y()); } }; - + typedef std::vector Scan45Vector; //definitions @@ -474,7 +474,7 @@ namespace boost { namespace polygon{ typedef typename Scan45Data::iterator iterator; typedef typename Scan45Data::const_iterator const_iterator; typedef std::set CrossQueue; - + //data Scan45Data scanData_; CrossQueue crossQueue_; @@ -482,19 +482,19 @@ namespace boost { namespace polygon{ Unit x_; int justBefore_; public: - inline Scan45() : scanData_(), crossQueue_(), crossVector_(), + inline Scan45() : scanData_(), crossQueue_(), crossVector_(), x_((std::numeric_limits::min)()), justBefore_(false) { lessScan45Element lessElm(&x_, &justBefore_); scanData_ = std::set, lessScan45Element >(lessElm); } - inline Scan45(const Scan45& that) : scanData_(), crossQueue_(), crossVector_(), + inline Scan45(const Scan45& that) : scanData_(), crossQueue_(), crossVector_(), x_((std::numeric_limits::min)()), justBefore_(false) { (*this) = that; } inline Scan45& operator=(const Scan45& that) { x_ = that.x_; justBefore_ = that.justBefore_; - crossQueue_ = that.crossQueue_; - crossVector_ = that.crossVector_; + crossQueue_ = that.crossQueue_; + crossVector_ = that.crossVector_; lessScan45Element lessElm(&x_, &justBefore_); scanData_ = std::set, lessScan45Element >(lessElm); for(const_iterator itr = that.scanData_.begin(); itr != that.scanData_.end(); ++itr){ @@ -502,7 +502,7 @@ namespace boost { namespace polygon{ } return *this; } - + //cT is an output container of Vertex45 //iT is an iterator over Scan45Vertex elements template @@ -623,7 +623,7 @@ namespace boost { namespace polygon{ for(std::size_t i = 0; i < numEdges; ++i) { eraseVec.push_back(eraseItrs[i]); } - + //take the derivative wrt theta of the count at the crossing point vertex.second[2] = count[2] - countBelow; vertex.second[1] = count[1] - count[2]; @@ -650,7 +650,7 @@ namespace boost { namespace polygon{ findCross_(searchVec[i]); } } - + template inline iT mergeCross_(iT inputBegin, iT inputEnd) { Scan45Vector vec; @@ -677,7 +677,7 @@ namespace boost { namespace polygon{ } return inputBegin; } - + template inline iT processEvent_(cT& output, iT inputBegin, iT inputEnd) { //std::cout << "processEvent_\n"; @@ -695,12 +695,12 @@ namespace boost { namespace polygon{ prevIter->evalAtX(x_) < vertex.first.y())) { //std::cout << "faking null event\n"; vertex = Scan45Vertex(Point(x_, prevIter->evalAtX(x_)), Scan45Count()); - } else { - ++inputBegin; + } else { + ++inputBegin; //std::cout << "after increment\n"; //accumulate overlapping changes in Scan45Count while(inputBegin != inputEnd && - (*inputBegin).first.x() == x_ && + (*inputBegin).first.x() == x_ && (*inputBegin).first.y() == vertex.first.y()) { //std::cout << "accumulate\n"; vertex.second += (*inputBegin).second; @@ -715,7 +715,7 @@ namespace boost { namespace polygon{ } //std::cout << vertex.second << std::endl; //vertex represents the change in state at this point - + //get counts at current vertex CountType countBelow; iterator lowIter = lookUp_(vertex.first.y()); @@ -764,15 +764,15 @@ namespace boost { namespace polygon{ //std::cout << "ADD\n"; vertex.second += countAt; //std::cout << vertex.second << std::endl; - + //add elements to the scanline for(int i = 0; i < 3; ++i) { if(vertex.second[i] != countBelow) { //std::cout << "insert: " << vertex.first.x() << " " << vertex.first.y() << " " << i-1 << // " " << vertex.second[i][0] << " " << vertex.second[i][1] << std::endl; - iterator insertIter = scanData_.insert(scanData_.end(), - Scan45ElementT(vertex.first.x(), - vertex.first.y(), + iterator insertIter = scanData_.insert(scanData_.end(), + Scan45ElementT(vertex.first.x(), + vertex.first.y(), i - 1, vertex.second[i])); findCross_(insertIter); output_functor f; @@ -784,7 +784,7 @@ namespace boost { namespace polygon{ //std::cout << "end processEvent\n"; return inputBegin; } - + //iter1 is horizontal inline void scheduleCross0_(iterator iter1, iterator iter2) { //std::cout << "0, "; @@ -815,7 +815,7 @@ namespace boost { namespace polygon{ throw(msg); } else { //note that result of this subtraction is always positive because itr1 is above itr2 in scanline - LongUnit halfDelta2 = (LongUnit)((((LongUnit)y1) - y2)/2); + LongUnit halfDelta2 = (LongUnit)((((LongUnit)y1) - y2)/2); //note that halfDelta2 has been truncated if(halfDelta2 + x_ <= UnitMax && halfDelta2 + y2 <= UnitMax) { crossQueue_.insert(crossQueue_.end(), Point(x_+static_cast(halfDelta2), y2+static_cast(halfDelta2))); @@ -823,13 +823,13 @@ namespace boost { namespace polygon{ } } } else { - LongUnit halfDelta = (LongUnit)((((LongUnit)y1) - y2)/2); + LongUnit halfDelta = (LongUnit)((((LongUnit)y1) - y2)/2); if(halfDelta + x_ <= UnitMax && halfDelta + y2 <= UnitMax) crossQueue_.insert(crossQueue_.end(), Point(x_+static_cast(halfDelta), y2+static_cast(halfDelta))); //std::cout << Point(x_+halfDelta, y2+halfDelta); } } - + inline void findCross_(iterator iter) { //std::cout << "find cross "; iterator iteratorBelow = iter; @@ -839,7 +839,7 @@ namespace boost { namespace polygon{ if(iter->rise == 0){ if(iteratorBelow->rise == 1) { scheduleCross0_(iter, iteratorBelow); - } + } } else { //iter->rise == -1 if(iteratorBelow->rise == 1) { @@ -863,10 +863,10 @@ namespace boost { namespace polygon{ scheduleCross0_(iteratorAbove, iter); } } - } - //std::cout << std::endl; - } - + } + //std::cout << std::endl; + } + inline iterator lookUp_(Unit y){ //if just before then we need to look from 1 not -1 return scanData_.lower_bound(Scan45ElementT(x_, y, -1+2*justBefore_)); @@ -874,7 +874,7 @@ namespace boost { namespace polygon{ }; //template - //static inline void print45Data(const std::set, + //static inline void print45Data(const std::set, // lessScan45Element >& data) { // typename std::set, lessScan45Element >::const_iterator iter; // for(iter = data.begin(); iter != data.end(); ++iter) { @@ -920,7 +920,7 @@ namespace boost { namespace polygon{ stdcout << "done testing Scan45Data\n"; return true; } - + template static inline bool testScan45Rect(stream_type& stdcout) { stdcout << "testing Scan45Rect\n"; @@ -1306,7 +1306,7 @@ namespace boost { namespace polygon{ return true; } - + template static inline bool testScan45Star4(stream_type& stdcout) { stdcout << "testing Scan45Star4\n"; diff --git a/3party/boost/boost/polygon/detail/iterator_compact_to_points.hpp b/3party/boost/boost/polygon/detail/iterator_compact_to_points.hpp index 9634e6f75e..bed03d3f74 100644 --- a/3party/boost/boost/polygon/detail/iterator_compact_to_points.hpp +++ b/3party/boost/boost/polygon/detail/iterator_compact_to_points.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -24,7 +24,7 @@ public: typedef const point_type& reference; //immutable inline iterator_compact_to_points() : iter_(), iter_end_(), pt_(), firstX_(), orient_() {} - inline iterator_compact_to_points(iterator_type iter, iterator_type iter_end) : + inline iterator_compact_to_points(iterator_type iter, iterator_type iter_end) : iter_(iter), iter_end_(iter_end), pt_(), firstX_(), orient_(HORIZONTAL) { if(iter_ != iter_end_) { firstX_ = *iter_; @@ -66,4 +66,3 @@ public: } } #endif - diff --git a/3party/boost/boost/polygon/detail/iterator_geometry_to_set.hpp b/3party/boost/boost/polygon/detail/iterator_geometry_to_set.hpp index 4f6287309a..95840e2001 100644 --- a/3party/boost/boost/polygon/detail/iterator_geometry_to_set.hpp +++ b/3party/boost/boost/polygon/detail/iterator_geometry_to_set.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -28,8 +28,8 @@ private: bool is_hole_; public: iterator_geometry_to_set() : rectangle_(), vertex_(), corner_(4), orient_(), is_hole_() {} - iterator_geometry_to_set(const rectangle_type& rectangle, direction_1d dir, - orientation_2d orient = HORIZONTAL, bool is_hole = false, bool = false, direction_1d = CLOCKWISE) : + iterator_geometry_to_set(const rectangle_type& rectangle, direction_1d dir, + orientation_2d orient = HORIZONTAL, bool is_hole = false, bool = false, direction_1d = CLOCKWISE) : rectangle_(), vertex_(), corner_(0), orient_(orient), is_hole_(is_hole) { assign(rectangle_, rectangle); if(dir == HIGH) corner_ = 4; @@ -67,7 +67,7 @@ public: vertex_.second.second = 1; if(is_hole_) vertex_.second.second *= -1; } - return vertex_; + return vertex_; } }; @@ -93,9 +93,9 @@ private: int polygon_index; public: iterator_geometry_to_set() : vertex_(), itrb(), itre(), last_vertex_(), is_hole_(), multiplier_(), first_pt(), second_pt(), pts(), use_wrap(), orient_(), polygon_index(-1) {} - iterator_geometry_to_set(const polygon_type& polygon, direction_1d dir, orientation_2d orient = HORIZONTAL, bool is_hole = false, bool winding_override = false, direction_1d w = CLOCKWISE) : - vertex_(), itrb(), itre(), last_vertex_(), - is_hole_(is_hole), multiplier_(), first_pt(), second_pt(), pts(), use_wrap(), + iterator_geometry_to_set(const polygon_type& polygon, direction_1d dir, orientation_2d orient = HORIZONTAL, bool is_hole = false, bool winding_override = false, direction_1d w = CLOCKWISE) : + vertex_(), itrb(), itre(), last_vertex_(), + is_hole_(is_hole), multiplier_(), first_pt(), second_pt(), pts(), use_wrap(), orient_(orient), polygon_index(0) { itrb = begin_points(polygon); itre = end_points(polygon); @@ -116,7 +116,7 @@ public: evaluate_(); } } - iterator_geometry_to_set(const iterator_geometry_to_set& that) : + iterator_geometry_to_set(const iterator_geometry_to_set& that) : vertex_(), itrb(), itre(), last_vertex_(), is_hole_(), multiplier_(), first_pt(), second_pt(), pts(), use_wrap(), orient_(), polygon_index(-1) { vertex_ = that.vertex_; @@ -176,7 +176,7 @@ public: return !(*this == that); } inline reference operator*() const { - return vertex_; + return vertex_; } inline void evaluate_() { @@ -185,7 +185,7 @@ public: if(pts[1] == pts[2]) { vertex_.second.second = 0; } else if(pts[0].get(HORIZONTAL) != pts[1].get(HORIZONTAL)) { - vertex_.second.second = -1; + vertex_.second.second = -1; } else if(pts[0].get(VERTICAL) != pts[1].get(VERTICAL)) { vertex_.second.second = 1; } else { @@ -213,8 +213,8 @@ private: bool started_holes; public: iterator_geometry_to_set() : itrb(), itre(), itrhib(), itrhie(), itrhb(), itrhe(), orient_(), is_hole_(), started_holes() {} - iterator_geometry_to_set(const polygon_with_holes_type& polygon, direction_1d dir, - orientation_2d orient = HORIZONTAL, bool is_hole = false, bool = false, direction_1d = CLOCKWISE) : + iterator_geometry_to_set(const polygon_with_holes_type& polygon, direction_1d dir, + orientation_2d orient = HORIZONTAL, bool is_hole = false, bool = false, direction_1d = CLOCKWISE) : itrb(), itre(), itrhib(), itrhie(), itrhb(), itrhe(), orient_(orient), is_hole_(is_hole), started_holes() { itre = iterator_geometry_to_set(polygon, HIGH, orient, is_hole_); itrhe = end_holes(polygon); @@ -228,7 +228,7 @@ public: started_holes = false; } } - iterator_geometry_to_set(const iterator_geometry_to_set& that) : + iterator_geometry_to_set(const iterator_geometry_to_set& that) : itrb(), itre(), itrhib(), itrhie(), itrhb(), itrhe(), orient_(), is_hole_(), started_holes() { itrb = that.itrb; itre = that.itre; @@ -247,9 +247,9 @@ public: if(itrb == itre) { if(itrhib == itrhie) { if(itrhb != itrhe) { - itrhib = iterator_geometry_to_set::hole_type>(*itrhb, LOW, orient_, !is_hole_); - itrhie = iterator_geometry_to_set::hole_type>(*itrhb, HIGH, orient_, !is_hole_); ++itrhb; } else { @@ -258,21 +258,21 @@ public: //both point to end of the previous hole processed //no need to explicitly reset them, and it causes an stl debug assertion to use //the default constructed iterator this way - //itrhib = itrhie = iterator_geometry_to_set::hole_type>(); } } else { ++itrhib; if(itrhib == itrhie) { if(itrhb != itrhe) { - itrhib = iterator_geometry_to_set::hole_type>(*itrhb, LOW, orient_, !is_hole_); - itrhie = iterator_geometry_to_set::hole_type>(*itrhb, HIGH, orient_, !is_hole_); ++itrhb; } else { //this is the same case as above - //itrhib = itrhie = iterator_geometry_to_set::hole_type>(); } } @@ -281,9 +281,9 @@ public: ++itrb; if(itrb == itre) { if(itrhb != itrhe) { - itrhib = iterator_geometry_to_set::hole_type>(*itrhb, LOW, orient_, !is_hole_); - itrhie = iterator_geometry_to_set::hole_type>(*itrhb, HIGH, orient_, !is_hole_); ++itrhb; } @@ -312,4 +312,3 @@ public: } } #endif - diff --git a/3party/boost/boost/polygon/detail/max_cover.hpp b/3party/boost/boost/polygon/detail/max_cover.hpp index 343e29a795..e61725c4d4 100644 --- a/3party/boost/boost/polygon/detail/max_cover.hpp +++ b/3party/boost/boost/polygon/detail/max_cover.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -35,7 +35,7 @@ namespace boost { namespace polygon{ }; typedef std::pair, Node* > EdgeAssociation; - + class lessEdgeAssociation : public std::binary_function { public: inline lessEdgeAssociation() {} @@ -83,7 +83,7 @@ namespace boost { namespace polygon{ }; template - static inline void getMaxCover(cT& outputContainer, Node* node, orientation_2d orient, + static inline void getMaxCover(cT& outputContainer, Node* node, orientation_2d orient, Rectangle rect) { //std::cout << "New Root\n"; std::vector stack; @@ -170,7 +170,7 @@ namespace boost { namespace polygon{ Because the code is so much simpler than the loop algorithm I retain it for clarity template - static inline void getMaxCover(cT& outputContainer, Node* node, orientation_2d orient, + static inline void getMaxCover(cT& outputContainer, Node* node, orientation_2d orient, const Rectangle& rect) { Interval rectIvl = rect.get(orient); Interval nodeIvl = node->rect.get(orient); @@ -205,7 +205,7 @@ namespace boost { namespace polygon{ template static inline void computeDag(iT beginNode, iT endNode, orientation_2d orient, std::size_t size) { - std::vector leadingEdges; + std::vector leadingEdges; leadingEdges.reserve(size); for(iT iter = beginNode; iter != endNode; ++iter) { Node* nodep = &(*iter); @@ -213,7 +213,7 @@ namespace boost { namespace polygon{ Interval rectIvl = nodep->rect.get(orient); leadingEdges.push_back(EdgeAssociation(std::pair(leading, rectIvl), nodep)); } - gtlsort(leadingEdges.begin(), leadingEdges.end(), lessEdgeAssociation()); + polygon_sort(leadingEdges.begin(), leadingEdges.end(), lessEdgeAssociation()); typename std::vector::iterator leadingBegin = leadingEdges.begin(); iT trailingBegin = beginNode; while(leadingBegin != leadingEdges.end()) { diff --git a/3party/boost/boost/polygon/detail/minkowski.hpp b/3party/boost/boost/polygon/detail/minkowski.hpp index 312d9a284d..ce349472c6 100644 --- a/3party/boost/boost/polygon/detail/minkowski.hpp +++ b/3party/boost/boost/polygon/detail/minkowski.hpp @@ -1,4 +1,10 @@ +/* + Copyright 2008 Intel Corporation + Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +*/ namespace boost { namespace polygon { namespace detail { template @@ -62,11 +68,11 @@ struct minkowski_offset { a.get(a_polygons); b.get(b_polygons); for(std::size_t ai = 0; ai < a_polygons.size(); ++ai) { - convolve_point_sequence_with_polygons(result, begin_points(a_polygons[ai]), + convolve_point_sequence_with_polygons(result, begin_points(a_polygons[ai]), end_points(a_polygons[ai]), b_polygons); for(typename polygon_with_holes_traits::iterator_holes_type itrh = begin_holes(a_polygons[ai]); itrh != end_holes(a_polygons[ai]); ++itrh) { - convolve_point_sequence_with_polygons(result, begin_points(*itrh), + convolve_point_sequence_with_polygons(result, begin_points(*itrh), end_points(*itrh), b_polygons); } for(std::size_t bi = 0; bi < b_polygons.size(); ++bi) { @@ -100,9 +106,9 @@ struct minkowski_offset { ::boost::polygon::bloat(rect, 10); (*this) = rect - (*this); //invert } - //make_arc(std::vector >& return_points, + //make_arc(std::vector >& return_points, //point_data< double> start, point_data< double> end, - //point_data< double> center, double r, unsigned int num_circle_segments) + //point_data< double> center, double r, unsigned int num_circle_segments) std::vector > circle; point_data center(0.0, 0.0), start(0.0, (double)resizing); make_arc(circle, start, start, center, std::abs((double)resizing), diff --git a/3party/boost/boost/polygon/detail/polygon_45_formation.hpp b/3party/boost/boost/polygon/detail/polygon_45_formation.hpp index e814a1584f..8ad30f174e 100644 --- a/3party/boost/boost/polygon/detail/polygon_45_formation.hpp +++ b/3party/boost/boost/polygon/detail/polygon_45_formation.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -30,7 +30,7 @@ namespace boost { namespace polygon{ typedef std::pair Scan45Vertex; typedef typename boolean_op_45::template Scan45::template boolean_op_45_output_functor<0> > Scan45; - + class PolyLine45 { public: typedef typename std::list::const_iterator iterator; @@ -52,7 +52,7 @@ namespace boost { namespace polygon{ // copy constructor (since we have dynamic memory) inline PolyLine45(const PolyLine45& that) : points(that.points) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline PolyLine45& operator=(const PolyLine45& that) { points = that.points; @@ -68,31 +68,31 @@ namespace boost { namespace polygon{ inline std::size_t size() const { return points.size(); } //public data member - std::list points; + std::list points; }; class ActiveTail45 { private: //data - PolyLine45* tailp_; + PolyLine45* tailp_; ActiveTail45 *otherTailp_; std::list holesList_; bool head_; public: - + /** * @brief iterator over coordinates of the figure */ typedef typename PolyLine45::iterator iterator; - + /** * @brief iterator over holes contained within the figure */ typedef typename std::list::const_iterator iteratorHoles; - + //default constructor inline ActiveTail45() : tailp_(0), otherTailp_(0), holesList_(), head_(0) {} - + //constructor inline ActiveTail45(const Vertex45& vertex, ActiveTail45* otherTailp = 0) : tailp_(0), otherTailp_(0), holesList_(), head_(0) { @@ -110,7 +110,7 @@ namespace boost { namespace polygon{ tailp_->points.push_back(point); head_ = head; otherTailp_ = otherTailp; - + } inline ActiveTail45(ActiveTail45* otherTailp) : tailp_(0), otherTailp_(0), holesList_(), head_(0) { @@ -155,7 +155,7 @@ namespace boost { namespace polygon{ * @brief get the pointer to the activetail at the other end of the chain */ inline ActiveTail45* getOtherActiveTail() const { return otherTailp_; } - + /** * @brief test if another active tail is the other end of the chain */ @@ -298,7 +298,7 @@ namespace boost { namespace polygon{ */ template - static inline ActiveTail45* joinChains(Point point, ActiveTail45* at1, ActiveTail45* at2, bool solid, + static inline ActiveTail45* joinChains(Point point, ActiveTail45* at1, ActiveTail45* at2, bool solid, cT& output) { if(at1->otherTailp_ == at2) { //if(at2->otherTailp_ != at1) std::cout << "half closed error\n"; @@ -370,7 +370,7 @@ namespace boost { namespace polygon{ // std::cout << this << " " << tailp_ << " " << otherTailp_ << " " << holesList_.size() << " " << head_ << std::endl; // } - static inline std::pair createActiveTail45sAsPair(Point point, bool solid, + static inline std::pair createActiveTail45sAsPair(Point point, bool solid, ActiveTail45* phole, bool fractureHoles) { ActiveTail45* at1 = 0; ActiveTail45* at2 = 0; @@ -386,7 +386,7 @@ namespace boost { namespace polygon{ at2 = new ActiveTail45(at1); at1->otherTailp_ = at2; at2->head_ = !solid; - if(phole) + if(phole) at2->addHole(phole); //assert fractureHoles == false } return std::pair(at1, at2); @@ -398,64 +398,64 @@ namespace boost { namespace polygon{ class Vertex45CountT { public: typedef ct count_type; - inline Vertex45CountT() -#ifndef BOOST_POLYGON_MSVC - : counts() + inline Vertex45CountT() +#ifndef BOOST_POLYGON_MSVC + : counts() #endif { counts[0] = counts[1] = counts[2] = counts[3] = 0; } //inline Vertex45CountT(ct count) { counts[0] = counts[1] = counts[2] = counts[3] = count; } - inline Vertex45CountT(const ct& count1, const ct& count2, const ct& count3, + inline Vertex45CountT(const ct& count1, const ct& count2, const ct& count3, const ct& count4) -#ifndef BOOST_POLYGON_MSVC - : counts() -#endif - { - counts[0] = count1; - counts[1] = count2; +#ifndef BOOST_POLYGON_MSVC + : counts() +#endif + { + counts[0] = count1; + counts[1] = count2; counts[2] = count3; - counts[3] = count4; + counts[3] = count4; } inline Vertex45CountT(const Vertex45& vertex) -#ifndef BOOST_POLYGON_MSVC - : counts() -#endif - { +#ifndef BOOST_POLYGON_MSVC + : counts() +#endif + { counts[0] = counts[1] = counts[2] = counts[3] = 0; (*this) += vertex; } inline Vertex45CountT(const Vertex45CountT& count) -#ifndef BOOST_POLYGON_MSVC - : counts() -#endif - { +#ifndef BOOST_POLYGON_MSVC + : counts() +#endif + { (*this) = count; } - inline bool operator==(const Vertex45CountT& count) const { + inline bool operator==(const Vertex45CountT& count) const { for(unsigned int i = 0; i < 4; ++i) { - if(counts[i] != count.counts[i]) return false; + if(counts[i] != count.counts[i]) return false; } return true; } inline bool operator!=(const Vertex45CountT& count) const { return !((*this) == count); } - inline Vertex45CountT& operator=(ct count) { + inline Vertex45CountT& operator=(ct count) { counts[0] = counts[1] = counts[2] = counts[3] = count; return *this; } inline Vertex45CountT& operator=(const Vertex45CountT& count) { for(unsigned int i = 0; i < 4; ++i) { - counts[i] = count.counts[i]; + counts[i] = count.counts[i]; } - return *this; + return *this; } inline ct& operator[](int index) { return counts[index]; } inline ct operator[](int index) const {return counts[index]; } inline Vertex45CountT& operator+=(const Vertex45CountT& count){ for(unsigned int i = 0; i < 4; ++i) { - counts[i] += count.counts[i]; + counts[i] += count.counts[i]; } return *this; } inline Vertex45CountT& operator-=(const Vertex45CountT& count){ for(unsigned int i = 0; i < 4; ++i) { - counts[i] -= count.counts[i]; + counts[i] -= count.counts[i]; } return *this; } @@ -501,7 +501,7 @@ namespace boost { namespace polygon{ count[vertex.rise+1] = vertex.count; } inline Vertex45CompactT(const Vertex45CompactT& vertex) : pt(vertex.pt), count(vertex.count) {} - inline Vertex45CompactT& operator=(const Vertex45CompactT& vertex){ + inline Vertex45CompactT& operator=(const Vertex45CompactT& vertex){ pt = vertex.pt; count = vertex.count; return *this; } inline bool operator==(const Vertex45CompactT& vertex) const { return pt == vertex.pt && count == vertex.count; } @@ -536,12 +536,12 @@ namespace boost { namespace polygon{ typedef std::map Polygon45FormationData; typedef typename Polygon45FormationData::iterator iterator; typedef typename Polygon45FormationData::const_iterator const_iterator; - + //data Polygon45FormationData scanData_; Unit x_; int justBefore_; - int fractureHoles_; + int fractureHoles_; public: inline Polygon45Formation() : scanData_(), x_((std::numeric_limits::min)()), justBefore_(false), fractureHoles_(0) { lessVertex45 lessElm(&x_, &justBefore_); @@ -564,7 +564,7 @@ namespace boost { namespace polygon{ } return *this; } - + //cT is an output container of Polygon45 or Polygon45WithHoles //iT is an iterator over Vertex45 elements //inputBegin - inputEnd is a range of sorted iT that represents @@ -585,8 +585,8 @@ namespace boost { namespace polygon{ private: //functions template - inline std::pair processPoint_(cT& output, cT2& elements, Point point, - Vertex45Count& counts, ActiveTail45** tails, Vertex45Count& incoming) { + inline std::pair processPoint_(cT& output, cT2& elements, Point point, + Vertex45Count& counts, ActiveTail45** tails, Vertex45Count& incoming) { //std::cout << point << std::endl; //std::cout << counts[0] << " "; //std::cout << counts[1] << " "; @@ -609,7 +609,7 @@ namespace boost { namespace polygon{ if(counts[j] == 1) { //std::cout << "case1: " << i << " " << j << std::endl; //if a figure is closed it will be written out by this function to output - ActiveTail45::joinChains(point, tails[i], tails[j], true, output); + ActiveTail45::joinChains(point, tails[i], tails[j], true, output); counts[i] = 0; counts[j] = 0; tails[i] = 0; @@ -632,7 +632,7 @@ namespace boost { namespace polygon{ if(incoming[j] == -1) { //std::cout << "case2: " << i << " " << j << std::endl; //std::cout << "creating active tail pair\n"; - std::pair tailPair = + std::pair tailPair = ActiveTail45::createActiveTail45sAsPair(point, true, 0, fractureHoles_ != 0); //tailPair.first->print(); //tailPair.second->print(); @@ -740,7 +740,7 @@ namespace boost { namespace polygon{ } break; } - } + } //find beginning of a hole for(int i = 0; i < 3; ++i) { if(incoming[i] != 0) { @@ -750,7 +750,7 @@ namespace boost { namespace polygon{ //we are beginning a empty space ActiveTail45* holep = 0; if(counts[3] == 0) holep = tails[3]; - std::pair tailPair = + std::pair tailPair = ActiveTail45::createActiveTail45sAsPair(point, false, holep, fractureHoles_ != 0); if(j == 3) { returnValue = tailPair.first; @@ -839,7 +839,7 @@ namespace boost { namespace polygon{ //we got a hole out of the point we just processed //iter is still at the next y element above the current y value in the tree //std::cout << "checking whether ot handle hole\n"; - if(currentIter == inputEnd || + if(currentIter == inputEnd || currentIter->pt.x() != x_ || currentIter->pt.y() >= iter->first.evalAtX(x_)) { //std::cout << "handle hole here\n"; @@ -882,12 +882,12 @@ namespace boost { namespace polygon{ //std::cout << "end processEvent\n"; return currentIter; } - + inline iterator lookUp_(Unit y){ //if just before then we need to look from 1 not -1 return scanData_.lower_bound(Vertex45(Point(x_, y), -1+2*justBefore_, 0)); } - + }; template @@ -904,7 +904,7 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 0), 2, -1)); data.push_back(Vertex45(Point(10, 10), 2, 1)); data.push_back(Vertex45(Point(10, 10), 0, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -928,14 +928,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 10), 2, -1)); data.push_back(Vertex45(Point(10, 20), 2, 1)); data.push_back(Vertex45(Point(10, 20), 1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon formation\n"; - return true; + return true; } //polygon45set class @@ -952,15 +952,15 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 10), 1, 1)); data.push_back(Vertex45(Point(10, 10), 0, -1)); data.push_back(Vertex45(Point(20, 10), 1, -1)); - data.push_back(Vertex45(Point(20, 10), 0, 1)); - gtlsort(data.begin(), data.end()); + data.push_back(Vertex45(Point(20, 10), 0, 1)); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon formation\n"; - return true; + return true; } //polygon45set class @@ -1018,14 +1018,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(12, 8), 1, -1)); // result == 12 8 -1 1 data.push_back(Vertex45(Point(12, 8), -1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon formation\n"; - return true; + return true; } template @@ -1050,15 +1050,15 @@ namespace boost { namespace polygon{ sortScan45Vector(vertices); stdcout << "scanning\n"; scan45.scan(result, vertices.begin(), vertices.end()); - - gtlsort(result.begin(), result.end()); + + polygon_sort(result.begin(), result.end()); pf.scan(polys, result.begin(), result.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon formation\n"; - return true; + return true; } template @@ -1123,14 +1123,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(8, 6), -1, -1)); data.push_back(Vertex45(Point(8, 6), 1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon formation\n"; - return true; + return true; } template @@ -1195,14 +1195,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 8), -1, -1)); data.push_back(Vertex45(Point(10, 8), 1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon formation\n"; - return true; + return true; } template @@ -1211,7 +1211,7 @@ namespace boost { namespace polygon{ Polygon45Formation pf(false); std::vector polys; std::vector data; - + data.push_back(Vertex45(Point(0, 0), 0, 1)); data.push_back(Vertex45(Point(0, 0), 2, 1)); data.push_back(Vertex45(Point(0, 100), 2, -1)); @@ -1239,14 +1239,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 22), 2, -1)); data.push_back(Vertex45(Point(10, 22), 0, -1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon formation\n"; - return true; + return true; } @@ -1256,7 +1256,7 @@ namespace boost { namespace polygon{ typedef std::map Polygon45FormationData; typedef typename Polygon45FormationData::iterator iterator; typedef typename Polygon45FormationData::const_iterator const_iterator; - + //data Polygon45FormationData scanData_; Unit x_; @@ -1266,7 +1266,7 @@ namespace boost { namespace polygon{ lessVertex45 lessElm(&x_, &justBefore_); scanData_ = Polygon45FormationData(lessElm); } - inline Polygon45Tiling(const Polygon45Tiling& that) : + inline Polygon45Tiling(const Polygon45Tiling& that) : scanData_(), x_((std::numeric_limits::min)()), justBefore_(false) { (*this) = that; } inline Polygon45Tiling& operator=(const Polygon45Tiling& that) { x_ = that.x_; @@ -1278,7 +1278,7 @@ namespace boost { namespace polygon{ } return *this; } - + //cT is an output container of Polygon45 or Polygon45WithHoles //iT is an iterator over Vertex45 elements //inputBegin - inputEnd is a range of sorted iT that represents @@ -1298,13 +1298,13 @@ namespace boost { namespace polygon{ private: //functions - - inline void getVerticalPair_(std::pair& verticalPair, + + inline void getVerticalPair_(std::pair& verticalPair, iterator previter) { ActiveTail45* iterTail = (*previter).second; Point prevPoint(x_, previter->first.evalAtX(x_)); iterTail->pushPoint(prevPoint); - std::pair tailPair = + std::pair tailPair = ActiveTail45::createActiveTail45sAsPair(prevPoint, true, 0, false); verticalPair.first = iterTail; verticalPair.second = tailPair.first; @@ -1312,10 +1312,10 @@ namespace boost { namespace polygon{ } template - inline std::pair processPoint_(cT& output, cT2& elements, - std::pair& verticalPair, - iterator previter, Point point, - Vertex45Count& counts, ActiveTail45** tails, Vertex45Count& incoming) { + inline std::pair processPoint_(cT& output, cT2& elements, + std::pair& verticalPair, + iterator previter, Point point, + Vertex45Count& counts, ActiveTail45** tails, Vertex45Count& incoming) { //std::cout << point << std::endl; //std::cout << counts[0] << " "; //std::cout << counts[1] << " "; @@ -1341,7 +1341,7 @@ namespace boost { namespace polygon{ if(counts[j] == 1) { //std::cout << "case1: " << i << " " << j << std::endl; //if a figure is closed it will be written out by this function to output - ActiveTail45::joinChains(point, tails[i], tails[j], true, output); + ActiveTail45::joinChains(point, tails[i], tails[j], true, output); counts[i] = 0; counts[j] = 0; tails[i] = 0; @@ -1364,7 +1364,7 @@ namespace boost { namespace polygon{ if(incoming[j] == -1) { //std::cout << "case2: " << i << " " << j << std::endl; //std::cout << "creating active tail pair\n"; - std::pair tailPair = + std::pair tailPair = ActiveTail45::createActiveTail45sAsPair(point, true, 0, false); //tailPair.first->print(); //tailPair.second->print(); @@ -1412,10 +1412,10 @@ namespace boost { namespace polygon{ returnCount = -1; } else { verticalPairOut.first = tails[i]; - std::pair tailPair = + std::pair tailPair = ActiveTail45::createActiveTail45sAsPair(point, true, 0, false); verticalPairOut.second = tailPair.first; - elements.push_back(std::pair(Vertex45(point, j -1, incoming[j]), + elements.push_back(std::pair(Vertex45(point, j -1, incoming[j]), tailPair.second)); } tails[i] = 0; @@ -1452,16 +1452,16 @@ namespace boost { namespace polygon{ if(verticalPair.first == 0) { getVerticalPair_(verticalPair, previter); } - ActiveTail45::joinChains(point, tails[i], verticalPair.first, true, output); + ActiveTail45::joinChains(point, tails[i], verticalPair.first, true, output); returnValue = verticalPair.second; returnCount = 1; } else { if(verticalPair.first == 0) { getVerticalPair_(verticalPair, previter); } - ActiveTail45::joinChains(point, tails[i], verticalPair.first, true, output); + ActiveTail45::joinChains(point, tails[i], verticalPair.first, true, output); verticalPair.second->pushPoint(point); - elements.push_back(std::pair(Vertex45(point, j -1, incoming[j]), + elements.push_back(std::pair(Vertex45(point, j -1, incoming[j]), verticalPair.second)); } tails[i] = 0; @@ -1493,7 +1493,7 @@ namespace boost { namespace polygon{ if(verticalPair.first == 0) { getVerticalPair_(verticalPair, previter); } - ActiveTail45::joinChains(point, tails[j], verticalPair.first, true, output); + ActiveTail45::joinChains(point, tails[j], verticalPair.first, true, output); verticalPairOut.second = verticalPair.second; } tails[i] = 0; @@ -1505,7 +1505,7 @@ namespace boost { namespace polygon{ } break; } - } + } //find beginning of a hole for(int i = 0; i < 3; ++i) { if(incoming[i] != 0) { @@ -1521,7 +1521,7 @@ namespace boost { namespace polygon{ returnValue = verticalPair.first; returnCount = -1; } else { - std::pair tailPair = + std::pair tailPair = ActiveTail45::createActiveTail45sAsPair(point, true, 0, false); //std::cout << "new element " << j-1 << " " << incoming[j] << std::endl; elements.push_back(std::pair(Vertex45(point, j -1, incoming[j]), tailPair.second)); @@ -1646,12 +1646,12 @@ namespace boost { namespace polygon{ //std::cout << "end processEvent\n"; return currentIter; } - + inline iterator lookUp_(Unit y){ //if just before then we need to look from 1 not -1 return scanData_.lower_bound(Vertex45(Point(x_, y), -1+2*justBefore_, 0)); } - + }; template @@ -1668,7 +1668,7 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 0), 2, -1)); data.push_back(Vertex45(Point(10, 10), 2, 1)); data.push_back(Vertex45(Point(10, 10), 0, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1692,14 +1692,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 10), 2, -1)); data.push_back(Vertex45(Point(10, 20), 2, 1)); data.push_back(Vertex45(Point(10, 20), 1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -1715,15 +1715,15 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 10), 1, 1)); data.push_back(Vertex45(Point(10, 10), 0, -1)); data.push_back(Vertex45(Point(20, 10), 1, -1)); - data.push_back(Vertex45(Point(20, 10), 0, 1)); - gtlsort(data.begin(), data.end()); + data.push_back(Vertex45(Point(20, 10), 0, 1)); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -1742,14 +1742,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 10), 0, 1)); data.push_back(Vertex45(Point(20, 20), 1, 1)); data.push_back(Vertex45(Point(20, 20), 2, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -1768,14 +1768,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(20, 10), 0, 1)); data.push_back(Vertex45(Point(20, -10), -1, -1)); data.push_back(Vertex45(Point(20, -10), 2, -1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -1800,8 +1800,8 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(2, 2), 1, -1)); data.push_back(Vertex45(Point(2, 2), 0, 1)); data.push_back(Vertex45(Point(3, 2), 1, 1)); - data.push_back(Vertex45(Point(3, 2), 0, -1)); - gtlsort(data.begin(), data.end()); + data.push_back(Vertex45(Point(3, 2), 0, -1)); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1835,7 +1835,7 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(2, 2), 2, -1)); data.push_back(Vertex45(Point(2, 2), 0, -1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1899,14 +1899,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(12, 8), 1, -1)); // result == 12 8 -1 1 data.push_back(Vertex45(Point(12, 8), -1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -1932,15 +1932,15 @@ namespace boost { namespace polygon{ sortScan45Vector(vertices); stdcout << "scanning\n"; scan45.scan(result, vertices.begin(), vertices.end()); - - gtlsort(result.begin(), result.end()); + + polygon_sort(result.begin(), result.end()); pf.scan(polys, result.begin(), result.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -2005,14 +2005,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(8, 6), -1, -1)); data.push_back(Vertex45(Point(8, 6), 1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -2077,14 +2077,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 8), -1, -1)); data.push_back(Vertex45(Point(10, 8), 1, 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } template @@ -2093,7 +2093,7 @@ namespace boost { namespace polygon{ Polygon45Tiling pf; std::vector polys; std::vector data; - + data.push_back(Vertex45(Point(0, 0), 0, 1)); data.push_back(Vertex45(Point(0, 0), 2, 1)); data.push_back(Vertex45(Point(0, 100), 2, -1)); @@ -2121,14 +2121,14 @@ namespace boost { namespace polygon{ data.push_back(Vertex45(Point(10, 22), 2, -1)); data.push_back(Vertex45(Point(10, 22), 0, -1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { stdcout << polys[i] << std::endl; } stdcout << "done testing polygon tiling\n"; - return true; + return true; } }; @@ -2137,7 +2137,7 @@ namespace boost { namespace polygon{ public: typedef typename polygon_45_formation::ActiveTail45 ActiveTail45; typedef typename ActiveTail45::iterator iterator; - + typedef polygon_45_concept geometry_type; typedef Unit coordinate_type; typedef point_data Point; @@ -2145,7 +2145,7 @@ namespace boost { namespace polygon{ // typedef iterator_points_to_compact compact_iterator_type; typedef iterator iterator_type; typedef typename coordinate_traits::area_type area_type; - + inline PolyLine45HoleData() : p_(0) {} inline PolyLine45HoleData(ActiveTail45* p) : p_(p) {} //use default copy and assign @@ -2166,7 +2166,7 @@ namespace boost { namespace polygon{ typedef typename polygon_45_formation::ActiveTail45 ActiveTail45; typedef typename ActiveTail45::iterator iterator; typedef PolyLine45HoleData holeType; - + typedef polygon_45_with_holes_concept geometry_type; typedef Unit coordinate_type; typedef point_data Point; @@ -2187,7 +2187,7 @@ namespace boost { namespace polygon{ typedef const value_type& reference; //immutable inline iteratorHoles() : itr_() {} inline iteratorHoles(typename ActiveTail45::iteratorHoles itr) : itr_(itr) {} - inline iteratorHoles(const iteratorHoles& that) : itr_(that.itr_) {} + inline iteratorHoles(const iteratorHoles& that) : itr_(that.itr_) {} inline iteratorHoles& operator=(const iteratorHoles& that) { itr_ = that.itr_; return *this; @@ -2208,8 +2208,8 @@ namespace boost { namespace polygon{ } }; typedef iteratorHoles iterator_holes_type; - - + + inline PolyLine45PolygonData() : p_(0) {} inline PolyLine45PolygonData(ActiveTail45* p) : p_(p) {} //use default copy and assign @@ -2225,7 +2225,7 @@ namespace boost { namespace polygon{ inline PolyLine45PolygonData& set(iT inputBegin, iT inputEnd) { return *this; } - + // initialize a polygon from x,y values, it is assumed that the first is an x // and that the input is a well behaved polygon template diff --git a/3party/boost/boost/polygon/detail/polygon_45_set_view.hpp b/3party/boost/boost/polygon/detail/polygon_45_set_view.hpp index 34423862b6..caf4c62865 100644 --- a/3party/boost/boost/polygon/detail/polygon_45_set_view.hpp +++ b/3party/boost/boost/polygon/detail/polygon_45_set_view.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -18,11 +18,11 @@ namespace boost { namespace polygon{ typedef typename polygon_45_set_view::iterator_type iterator_type; typedef typename polygon_45_set_view::operator_arg_type operator_arg_type; - static inline iterator_type begin(const polygon_45_set_view& polygon_45_set); + static inline iterator_type begin(const polygon_45_set_view& polygon_45_set); static inline iterator_type end(const polygon_45_set_view& polygon_45_set); template - static inline void set(polygon_45_set_view& polygon_45_set, + static inline void set(polygon_45_set_view& polygon_45_set, input_iterator_type input_begin, input_iterator_type input_end); static inline bool clean(const polygon_45_set_view& polygon_45_set); @@ -114,12 +114,12 @@ namespace boost { namespace polygon{ bool sorted() const { return value().sorted(); } //result of a boolean is sorted // template - // void set(input_iterator_type input_begin, input_iterator_type input_end, + // void set(input_iterator_type input_begin, input_iterator_type input_end, // orientation_2d orient) const { // orient_ = orient; // output_.clear(); // output_.insert(output_.end(), input_begin, input_end); - // gtlsort(output_.begin(), output_.end()); + // polygon_sort(output_.begin(), output_.end()); // } }; @@ -137,7 +137,7 @@ namespace boost { namespace polygon{ } template bool polygon_45_set_traits >:: - clean(const polygon_45_set_view& polygon_45_set) { + clean(const polygon_45_set_view& polygon_45_set) { return polygon_45_set.value().clean(); } template @@ -194,32 +194,32 @@ namespace boost { namespace polygon{ typename is_polygon_45_or_90_set_type::type, typename is_polygon_45_or_90_set_type::type, typename is_either_polygon_45_set_type::type>::type, - polygon_45_set_view >::type + polygon_45_set_view >::type operator|(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_45_set_view (lvalue, rvalue); } - + struct y_ps45_p : gtl_yes {}; template typename enable_if< typename gtl_and_4< y_ps45_p, - typename gtl_if::type>::type, - typename gtl_if::type>::type, - typename gtl_if::type>::type>::type, - polygon_45_set_view >::type + typename gtl_if::type>::type, + typename gtl_if::type>::type, + typename gtl_if::type>::type>::type, + polygon_45_set_view >::type operator+(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_45_set_view (lvalue, rvalue); } - + struct y_ps45_s : gtl_yes {}; template typename enable_if< typename gtl_and_4< y_ps45_s, typename is_polygon_45_or_90_set_type::type, typename is_polygon_45_or_90_set_type::type, typename is_either_polygon_45_set_type::type>::type, - polygon_45_set_view >::type + polygon_45_set_view >::type operator*(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_45_set_view (lvalue, rvalue); @@ -231,7 +231,7 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and_4< y_ps45_a, typename is_polygon_45_or_90_set_type::type, typename is_polygon_45_or_90_set_type::type, typename is_either_polygon_45_set_type::type>::type, - polygon_45_set_view >::type + polygon_45_set_view >::type operator&(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_45_set_view (lvalue, rvalue); @@ -243,30 +243,30 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and_4< y_ps45_x, typename is_polygon_45_or_90_set_type::type, typename is_polygon_45_or_90_set_type::type, typename is_either_polygon_45_set_type::type>::type, - polygon_45_set_view >::type + polygon_45_set_view >::type operator^(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_45_set_view (lvalue, rvalue); } - + struct y_ps45_m : gtl_yes {}; template typename enable_if< typename gtl_and_4< y_ps45_m, - typename gtl_if::type>::type, - typename gtl_if::type>::type, - typename gtl_if::type>::type>::type, - polygon_45_set_view >::type + typename gtl_if::type>::type, + typename gtl_if::type>::type, + typename gtl_if::type>::type>::type, + polygon_45_set_view >::type operator-(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_45_set_view (lvalue, rvalue); } - + struct y_ps45_pe : gtl_yes {}; template typename enable_if< typename gtl_and_4::type, gtl_yes, - typename is_polygon_45_or_90_set_type::type>::type, + typename is_polygon_45_or_90_set_type::type>::type, geometry_type_1>::type & operator+=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op_45(lvalue, rvalue); @@ -275,8 +275,8 @@ namespace boost { namespace polygon{ struct y_ps45_be : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type, - typename is_polygon_45_or_90_set_type::type>::type, + typename enable_if< typename gtl_and_3::type, + typename is_polygon_45_or_90_set_type::type>::type, geometry_type_1>::type & operator|=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op_45(lvalue, rvalue); @@ -286,8 +286,8 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3< y_ps45_se, - typename is_mutable_polygon_45_set_type::type, - typename is_polygon_45_or_90_set_type::type>::type, + typename is_mutable_polygon_45_set_type::type, + typename is_polygon_45_or_90_set_type::type>::type, geometry_type_1>::type & operator*=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op_45(lvalue, rvalue); @@ -296,8 +296,8 @@ namespace boost { namespace polygon{ struct y_ps45_ae : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type, - typename is_polygon_45_or_90_set_type::type>::type, + typename enable_if< typename gtl_and_3::type, + typename is_polygon_45_or_90_set_type::type>::type, geometry_type_1>::type & operator&=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op_45(lvalue, rvalue); @@ -306,9 +306,9 @@ namespace boost { namespace polygon{ struct y_ps45_xe : gtl_yes {}; template - typename enable_if< - typename gtl_and_3::type, - typename is_polygon_45_or_90_set_type::type>::type, + typename enable_if< + typename gtl_and_3::type, + typename is_polygon_45_or_90_set_type::type>::type, geometry_type_1>::type & operator^=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op_45(lvalue, rvalue); @@ -317,8 +317,8 @@ namespace boost { namespace polygon{ struct y_ps45_me : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type, - typename is_polygon_45_or_90_set_type::type>::type, + typename enable_if< typename gtl_and_3::type, + typename is_polygon_45_or_90_set_type::type>::type, geometry_type_1>::type & operator-=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op_45(lvalue, rvalue); @@ -327,8 +327,8 @@ namespace boost { namespace polygon{ struct y_ps45_rpe : gtl_yes {}; template - typename enable_if< typename gtl_and_3< y_ps45_rpe, typename is_mutable_polygon_45_set_type::type, - typename gtl_same_type::type, + typename enable_if< typename gtl_and_3< y_ps45_rpe, typename is_mutable_polygon_45_set_type::type, + typename gtl_same_type::type, coordinate_concept>::type>::type, geometry_type_1>::type & operator+=(geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -338,8 +338,8 @@ namespace boost { namespace polygon{ struct y_ps45_rme : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, - typename gtl_same_type::type, + typename enable_if< typename gtl_and_3::type>::type, + typename gtl_same_type::type, coordinate_concept>::type>::type, geometry_type_1>::type & operator-=(geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -349,8 +349,8 @@ namespace boost { namespace polygon{ struct y_ps45_rp : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, - typename gtl_same_type::type, + typename enable_if< typename gtl_and_3::type>::type, + typename gtl_same_type::type, coordinate_concept>::type> ::type, geometry_type_1>::type operator+(const geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -362,8 +362,8 @@ namespace boost { namespace polygon{ struct y_ps45_rm : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, - typename gtl_same_type::type, + typename enable_if< typename gtl_and_3::type>::type, + typename gtl_same_type::type, coordinate_concept>::type> ::type, geometry_type_1>::type operator-(const geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -375,4 +375,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/detail/polygon_45_touch.hpp b/3party/boost/boost/polygon/detail/polygon_45_touch.hpp index e50912ac9b..5da606b325 100644 --- a/3party/boost/boost/polygon/detail/polygon_45_touch.hpp +++ b/3party/boost/boost/polygon/detail/polygon_45_touch.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -32,7 +32,7 @@ namespace boost { namespace polygon{ } else { int count = mp[i].second; if(subtract) count -= mp2[j].second; - else count += mp2[j].second; + else count += mp2[j].second; if(count) { newmp.push_back(mp[i]); newmp.back().second = count; @@ -63,7 +63,7 @@ namespace boost { namespace polygon{ inline bool operator!=(const CountTouch& count) const { return !((*this) == count); } //inline CountTouch& operator=(int count) { counts[0] = counts[1] = count; return *this; } inline CountTouch& operator=(const CountTouch& count) { counts = count.counts; return *this; } - inline int& operator[](int index) { + inline int& operator[](int index) { std::vector >::iterator itr = lower_bound(counts.begin(), counts.end(), std::make_pair(index, int(0))); if(itr != counts.end() && itr->first == index) { return itr->second; @@ -102,8 +102,8 @@ namespace boost { namespace polygon{ std::vector > counts; }; - typedef std::pair > >, std::map > > map_graph_o; - typedef std::pair > >, std::vector > > vector_graph_o; + typedef std::pair > >, std::map > > map_graph_o; + typedef std::pair > >, std::vector > > vector_graph_o; template static void process_previous_x(cT& output) { @@ -124,10 +124,10 @@ namespace boost { namespace polygon{ } y_prop_map.clear(); } - + struct touch_45_output_functor { template - void operator()(cT& output, const CountTouch& count1, const CountTouch& count2, + void operator()(cT& output, const CountTouch& count1, const CountTouch& count2, const Point& pt, int , direction_1d ) { Unit& x = output.first.first; std::map >& y_prop_map = output.first.second; @@ -138,7 +138,7 @@ namespace boost { namespace polygon{ itr1 != count1.counts.end(); ++itr1) { if(itr1->second > 0) { output_set.insert(output_set.end(), itr1->first); - } + } } for(std::vector >::const_iterator itr2 = count2.counts.begin(); itr2 != count2.counts.end(); ++itr2) { @@ -148,16 +148,16 @@ namespace boost { namespace polygon{ } } }; - typedef typename std::pair::template Scan45CountT > Vertex45Compact; typedef std::vector TouchSetData; - + struct lessVertex45Compact { bool operator()(const Vertex45Compact& l, const Vertex45Compact& r) { return l.first < r.first; } }; - + // template // static void print_tsd(TSD& tsd) { // for(std::size_t i = 0; i < tsd.size(); ++i) { @@ -185,8 +185,8 @@ namespace boost { namespace polygon{ template static void performTouch(graph_type& graph, TouchSetData& tsd) { - - gtlsort(tsd.begin(), tsd.end(), lessVertex45Compact()); + + polygon_sort(tsd.begin(), tsd.end(), lessVertex45Compact()); typedef std::vector::template Scan45CountT > > TSD; TSD tsd_; tsd_.reserve(tsd.size()); @@ -227,10 +227,10 @@ namespace boost { namespace polygon{ } } } - + }; } } -#endif +#endif diff --git a/3party/boost/boost/polygon/detail/polygon_90_set_view.hpp b/3party/boost/boost/polygon/detail/polygon_90_set_view.hpp index 53beec8da1..f6ee36c5b6 100644 --- a/3party/boost/boost/polygon/detail/polygon_90_set_view.hpp +++ b/3party/boost/boost/polygon/detail/polygon_90_set_view.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -23,7 +23,7 @@ namespace boost { namespace polygon{ typedef typename polygon_90_set_view::iterator_type iterator_type; typedef typename polygon_90_set_view::operator_arg_type operator_arg_type; - static inline iterator_type begin(const polygon_90_set_view& polygon_set); + static inline iterator_type begin(const polygon_90_set_view& polygon_set); static inline iterator_type end(const polygon_90_set_view& polygon_set); static inline orientation_2d orient(const polygon_90_set_view& polygon_set); @@ -46,7 +46,7 @@ namespace boost { namespace polygon{ insert_into_view_arg(linput_, lvalue_, orient_l); insert_into_view_arg(rinput_, rvalue_, orient_r); output_.applyBooleanBinaryOp(linput_.begin(), linput_.end(), - rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); + rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); } }; @@ -65,23 +65,23 @@ namespace boost { namespace polygon{ lvalue_.sort(); rvalue_.sort(); output_.applyBooleanBinaryOp(lvalue_.begin(), lvalue_.end(), - rvalue_.begin(), rvalue_.end(), boolean_op::BinaryCount()); + rvalue_.begin(), rvalue_.end(), boolean_op::BinaryCount()); }else if((orient_ != orient_l) && (orient_!= orient_r)){ // both the orientations are not equal to input // easier way is to ignore the input orientation and use the input data's orientation, but not done so insert_into_view_arg(linput_, lvalue_, orient_l); insert_into_view_arg(rinput_, rvalue_, orient_r); output_.applyBooleanBinaryOp(linput_.begin(), linput_.end(), - rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); + rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); }else if(orient_ != orient_l){ // left hand side orientation is different insert_into_view_arg(linput_, lvalue_, orient_l); rvalue_.sort(); output_.applyBooleanBinaryOp(linput_.begin(), linput_.end(), - rvalue_.begin(), rvalue_.end(), boolean_op::BinaryCount()); + rvalue_.begin(), rvalue_.end(), boolean_op::BinaryCount()); } else if(orient_ != orient_r){ // right hand side orientation is different insert_into_view_arg(rinput_, rvalue_, orient_r); lvalue_.sort(); output_.applyBooleanBinaryOp(lvalue_.begin(), lvalue_.end(), - rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); + rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); } } }; @@ -98,7 +98,7 @@ namespace boost { namespace polygon{ // << "," << orient_.to_int() << std::endl; insert_into_view_arg(rinput_, rvalue_, orient_r); output_.applyBooleanBinaryOp(lvalue_.begin(), lvalue_.end(), - rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); + rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); } }; @@ -115,7 +115,7 @@ namespace boost { namespace polygon{ // << "," << orient_.to_int() << std::endl; output_.applyBooleanBinaryOp(linput_.begin(), linput_.end(), - rvalue_.begin(), rvalue_.end(), boolean_op::BinaryCount()); + rvalue_.begin(), rvalue_.end(), boolean_op::BinaryCount()); } }; @@ -159,12 +159,12 @@ namespace boost { namespace polygon{ bool sorted() const { return true; } //result of a boolean is sorted // template -// void set(input_iterator_type input_begin, input_iterator_type input_end, +// void set(input_iterator_type input_begin, input_iterator_type input_end, // orientation_2d orient) const { // orient_ = orient; // output_.clear(); // output_.insert(output_.end(), input_begin, input_end); -// gtlsort(output_.begin(), output_.end()); +// polygon_sort(output_.begin(), output_.end()); // } void sort() const {} //is always sorted }; @@ -189,22 +189,22 @@ namespace boost { namespace polygon{ // template // template // void polygon_90_set_traits >:: -// set(polygon_90_set_view& polygon_set, +// set(polygon_90_set_view& polygon_set, // input_iterator_type input_begin, input_iterator_type input_end, // orientation_2d orient) { // polygon_set.set(input_begin, input_end, orient); // } template orientation_2d polygon_90_set_traits >:: - orient(const polygon_90_set_view& polygon_set) { + orient(const polygon_90_set_view& polygon_set) { return polygon_set.orient(); } template bool polygon_90_set_traits >:: - clean(const polygon_90_set_view& polygon_set) { + clean(const polygon_90_set_view& polygon_set) { return true; } template bool polygon_90_set_traits >:: - sorted(const polygon_90_set_view& polygon_set) { + sorted(const polygon_90_set_view& polygon_set) { return true; } template @@ -216,7 +216,7 @@ namespace boost { namespace polygon{ dest.insert(itr1, itr2, orient); dest.sort(); } - + template template inline polygon_90_set_data& polygon_90_set_data::operator=(const polygon_90_set_view& that) { @@ -225,22 +225,22 @@ namespace boost { namespace polygon{ unsorted_ = false; return *this; } - + template template inline polygon_90_set_data::polygon_90_set_data(const polygon_90_set_view& that) : orient_(that.orient()), data_(that.begin(), that.end()), dirty_(false), unsorted_(false) {} - + template struct self_assign_operator_lvalue { typedef geometry_type_1& type; }; - + template struct by_value_binary_operator { typedef type_1 type; }; - + template geometry_type_1& self_assignment_boolean_op(geometry_type_1& lvalue_, const geometry_type_2& rvalue_) { typedef geometry_type_1 ltype; @@ -257,7 +257,7 @@ namespace boost { namespace polygon{ // to be same as linput value_type rinput_(orient_); //BM: The output dataset's scanline orient is set as equal to first input dataset's (lvalue_) orientation - value_type output_(orient_); + value_type output_(orient_); insert_into_view_arg(linput_, lvalue_, orient_); // BM: The last argument orient_r is the user initialized scanline orientation for rvalue_ data set. // But since rinput (see above) is initialized to scanline orientation consistent with the lvalue_ @@ -265,11 +265,11 @@ namespace boost { namespace polygon{ insert_into_view_arg(rinput_, rvalue_, orient_r); // BM: boolean operation and output uses lvalue_ dataset's scanline orientation. output_.applyBooleanBinaryOp(linput_.begin(), linput_.end(), - rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); + rinput_.begin(), rinput_.end(), boolean_op::BinaryCount()); polygon_90_set_mutable_traits::set(lvalue_, output_.begin(), output_.end(), orient_); return lvalue_; } - + namespace operators { struct y_ps90_b : gtl_yes {}; @@ -279,27 +279,27 @@ namespace boost { namespace polygon{ typename is_polygon_90_set_type::type>::type, polygon_90_set_view >::type operator|(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { - return polygon_90_set_view - (lvalue, rvalue, + return polygon_90_set_view + (lvalue, rvalue, polygon_90_set_traits::orient(lvalue), boolean_op::BinaryOr()); } - + struct y_ps90_p : gtl_yes {}; template - typename enable_if< + typename enable_if< typename gtl_and_3< y_ps90_p, typename gtl_if::type>::type, typename gtl_if::type>::type>::type, polygon_90_set_view >::type operator+(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { - return polygon_90_set_view - (lvalue, rvalue, + return polygon_90_set_view + (lvalue, rvalue, polygon_90_set_traits::orient(lvalue), boolean_op::BinaryOr()); } - + struct y_ps90_s : gtl_yes {}; template @@ -308,12 +308,12 @@ namespace boost { namespace polygon{ typename is_polygon_90_set_type::type>::type, polygon_90_set_view >::type operator*(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { - return polygon_90_set_view - (lvalue, rvalue, + return polygon_90_set_view + (lvalue, rvalue, polygon_90_set_traits::orient(lvalue), boolean_op::BinaryAnd()); } - + struct y_ps90_a : gtl_yes {}; template @@ -322,8 +322,8 @@ namespace boost { namespace polygon{ typename is_polygon_90_set_type::type>::type, polygon_90_set_view >::type operator&(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { - return polygon_90_set_view - (lvalue, rvalue, + return polygon_90_set_view + (lvalue, rvalue, polygon_90_set_traits::orient(lvalue), boolean_op::BinaryAnd()); } @@ -336,12 +336,12 @@ namespace boost { namespace polygon{ typename is_polygon_90_set_type::type>::type, polygon_90_set_view >::type operator^(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { - return polygon_90_set_view - (lvalue, rvalue, + return polygon_90_set_view + (lvalue, rvalue, polygon_90_set_traits::orient(lvalue), boolean_op::BinaryXor()); } - + struct y_ps90_m : gtl_yes {}; template @@ -350,12 +350,12 @@ namespace boost { namespace polygon{ typename gtl_if::type>::type>::type, polygon_90_set_view >::type operator-(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { - return polygon_90_set_view - (lvalue, rvalue, + return polygon_90_set_view + (lvalue, rvalue, polygon_90_set_traits::orient(lvalue), boolean_op::BinaryNot()); } - + struct y_ps90_pe : gtl_yes {}; template @@ -366,11 +366,11 @@ namespace boost { namespace polygon{ polygon_90_set_traits::orient(rvalue)); return lvalue; } - + struct y_ps90_be : gtl_yes {}; // template - typename enable_if< typename gtl_and< y_ps90_be, typename is_polygon_90_set_type::type>::type, + typename enable_if< typename gtl_and< y_ps90_be, typename is_polygon_90_set_type::type>::type, polygon_90_set_data >::type & operator|=(polygon_90_set_data& lvalue, const geometry_type_2& rvalue) { return lvalue += rvalue; @@ -380,8 +380,8 @@ namespace boost { namespace polygon{ //normal self assignment boolean operations template - typename enable_if< typename gtl_and_3< y_ps90_pe2, typename is_mutable_polygon_90_set_type::type, - typename is_polygon_90_set_type::type>::type, + typename enable_if< typename gtl_and_3< y_ps90_pe2, typename is_mutable_polygon_90_set_type::type, + typename is_polygon_90_set_type::type>::type, geometry_type_1>::type & operator+=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -390,8 +390,8 @@ namespace boost { namespace polygon{ struct y_ps90_be2 : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type, - typename is_polygon_90_set_type::type>::type, + typename enable_if< typename gtl_and_3::type, + typename is_polygon_90_set_type::type>::type, geometry_type_1>::type & operator|=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -400,18 +400,18 @@ namespace boost { namespace polygon{ struct y_ps90_se : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type, - typename is_polygon_90_set_type::type>::type, + typename enable_if< typename gtl_and_3::type, + typename is_polygon_90_set_type::type>::type, geometry_type_1>::type & operator*=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); } - + struct y_ps90_ae : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type, - typename is_polygon_90_set_type::type>::type, + typename enable_if< typename gtl_and_3::type, + typename is_polygon_90_set_type::type>::type, geometry_type_1>::type & operator&=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -420,8 +420,8 @@ namespace boost { namespace polygon{ struct y_ps90_xe : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type, - typename is_polygon_90_set_type::type>::type, + typename enable_if< typename gtl_and_3::type, + typename is_polygon_90_set_type::type>::type, geometry_type_1>::type & operator^=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -430,8 +430,8 @@ namespace boost { namespace polygon{ struct y_ps90_me : gtl_yes {}; template - typename enable_if< typename gtl_and_3< y_ps90_me, typename is_mutable_polygon_90_set_type::type, - typename is_polygon_90_set_type::type>::type, + typename enable_if< typename gtl_and_3< y_ps90_me, typename is_mutable_polygon_90_set_type::type, + typename is_polygon_90_set_type::type>::type, geometry_type_1>::type & operator-=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -441,7 +441,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type, + typename is_mutable_polygon_90_set_type::type, typename gtl_same_type::type, coordinate_concept>::type>::type, geometry_type_1>::type & operator+=(geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -452,7 +452,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type, + typename is_mutable_polygon_90_set_type::type, typename gtl_same_type::type, coordinate_concept>::type>::type, geometry_type_1>::type & operator-=(geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -463,7 +463,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, + typename gtl_if::type>::type, typename gtl_if::type, coordinate_concept>::type>::type>::type, geometry_type_1>::type operator+(const geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -476,7 +476,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, + typename gtl_if::type>::type, typename gtl_if::type, coordinate_concept>::type>::type>::type, geometry_type_1>::type operator-(const geometry_type_1& lvalue, coordinate_type_1 rvalue) { @@ -488,4 +488,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/detail/polygon_90_touch.hpp b/3party/boost/boost/polygon/detail/polygon_90_touch.hpp index 7671602404..77a516b777 100644 --- a/3party/boost/boost/polygon/detail/polygon_90_touch.hpp +++ b/3party/boost/boost/polygon/detail/polygon_90_touch.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -30,7 +30,7 @@ namespace boost { namespace polygon{ bool incremented_; public: inline iterator() : itr_(), ivlIds_(), incremented_(false) {} - inline iterator(typename EventData::const_iterator itr, + inline iterator(typename EventData::const_iterator itr, Unit prevPos, Unit curPos, const std::set& ivlIds) : itr_(itr), ivlIds_(), incremented_(false) { ivlIds_.second = ivlIds; ivlIds_.first = Interval(prevPos, curPos); @@ -61,7 +61,7 @@ namespace boost { namespace polygon{ } else { ivlIds_.second.insert(*itr); } - } + } //std::cout << std::endl; //std::cout << "new state\n"; //for(std::set::iterator itr = ivlIds_.second.begin(); itr != ivlIds_.second.end(); ++itr) { @@ -77,7 +77,7 @@ namespace boost { namespace polygon{ ++(*this); return tmpItr; } - inline std::pair >& operator*() { + inline std::pair >& operator*() { if(incremented_) ivlIds_.first = Interval(ivlIds_.first.get(HIGH), itr_->first); incremented_ = false; if(ivlIds_.second.empty())(++(*this)); @@ -98,13 +98,13 @@ namespace boost { namespace polygon{ eventData_ = that.eventData_; return *this; } - + //Insert an interval polygon id into the EventData inline void insert(const std::pair& intervalId){ insert(intervalId.first.low(), intervalId.second); insert(intervalId.first.high(), intervalId.second); } - + //Insert an position and polygon id into EventData inline void insert(Unit pos, int id) { typename EventData::iterator lb = eventData_.lower_bound(pos); @@ -121,7 +121,7 @@ namespace boost { namespace polygon{ (*lb).second.insert(id); } } - + //merge this scan event with that by inserting its data inline void insert(const TouchScanEvent& that){ typename EventData::const_iterator itr; @@ -129,9 +129,9 @@ namespace boost { namespace polygon{ eventData_[(*itr).first].insert(itr->second.begin(), itr->second.end()); } } - + //Get the begin iterator over event data - inline iterator begin() const { + inline iterator begin() const { //std::cout << "begin\n"; if(eventData_.empty()) return end(); typename EventData::const_iterator itr = eventData_.begin(); @@ -140,18 +140,18 @@ namespace boost { namespace polygon{ ++itr; return iterator(itr, pos, itr->first, idr); } - + //Get the end iterator over event data inline iterator end() const { return iterator(eventData_.end(), 0, 0, std::set()); } - + inline void clear() { eventData_.clear(); } - - inline Interval extents() const { + + inline Interval extents() const { if(eventData_.empty()) return Interval(); return Interval((*(eventData_.begin())).first, (*(eventData_.rbegin())).first); } }; - + //declaration of a map of scan events by coordinate value used to store all the //polygon data for a single layer input into the scanline algorithm typedef std::pair, std::map > TouchSetData; @@ -166,8 +166,8 @@ namespace boost { namespace polygon{ public: inline TouchOp () : scanData_(), nextItr_() { nextItr_ = scanData_.end(); } inline TouchOp (const TouchOp& that) : scanData_(that.scanData_), nextItr_() { nextItr_ = scanData_.begin(); } - inline TouchOp& operator=(const TouchOp& that); - + inline TouchOp& operator=(const TouchOp& that); + //moves scanline forward inline void advanceScan() { nextItr_ = scanData_.begin(); } @@ -252,7 +252,7 @@ namespace boost { namespace polygon{ //std::cout << "case7" << std::endl; scanData_.erase(lowItr); } - } + } //merge the top interval with the one above if they have the same count if(highItr != scanData_.begin()) { //std::cout << "case8" << std::endl; @@ -279,7 +279,7 @@ namespace boost { namespace polygon{ // std::cout << std::endl; // } // } - + private: inline typename ScanData::iterator lookup_(Unit pos){ if(nextItr_ != scanData_.end() && nextItr_->first >= pos) { @@ -294,7 +294,7 @@ namespace boost { namespace polygon{ } template - inline void evaluateInterval_(graphT& outputContainer, std::set& ids, + inline void evaluateInterval_(graphT& outputContainer, std::set& ids, const std::set& changingIds, bool leadingEdge) { for(std::set::const_iterator ciditr = changingIds.begin(); ciditr != changingIds.end(); ++ciditr){ //std::cout << "evaluateInterval " << (*ciditr) << std::endl; diff --git a/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp b/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp index 5adabb8078..8c45617f7c 100644 --- a/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp +++ b/3party/boost/boost/polygon/detail/polygon_arbitrary_formation.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -40,7 +40,7 @@ namespace boost { namespace polygon{ return lp(pt, pt2) && lp(pt1, pt); return lp(pt, pt1) && lp(pt2, pt); } - + template static inline Unit compute_intercept(const area_type& dy2, const area_type& dx1, @@ -96,7 +96,7 @@ namespace boost { namespace polygon{ dy2 *= -1; dx2 *= -1; } else if(dx2 == 0) { - //if the second slope is vertical the first is always less unless it is also vertical, in which case they are equal + //if the second slope is vertical the first is always less unless it is also vertical, in which case they are equal return dx1 != 0; } typedef typename coordinate_traits::unsigned_area_type unsigned_product_type; @@ -173,9 +173,9 @@ namespace boost { namespace polygon{ return false; } - static inline Unit evalAtXforYlazy(Unit xIn, Point pt, Point other_pt) { + static inline Unit evalAtXforYlazy(Unit xIn, Point pt, Point other_pt) { long double - evalAtXforYret, evalAtXforYxIn, evalAtXforYx1, evalAtXforYy1, evalAtXforYdx1, evalAtXforYdx, + evalAtXforYret, evalAtXforYxIn, evalAtXforYx1, evalAtXforYy1, evalAtXforYdx1, evalAtXforYdx, evalAtXforYdy, evalAtXforYx2, evalAtXforYy2, evalAtXforY0; //y = (x - x1)dy/dx + y1 //y = (xIn - pt.x)*(other_pt.y-pt.y)/(other_pt.x-pt.x) + pt.y @@ -190,16 +190,16 @@ namespace boost { namespace polygon{ if(evalAtXforYdx1 == evalAtXforY0) return (Unit)evalAtXforYy1; evalAtXforYx2 = other_pt.get(HORIZONTAL); evalAtXforYy2 = other_pt.get(VERTICAL); - + evalAtXforYdx = evalAtXforYx2 - evalAtXforYx1; evalAtXforYdy = evalAtXforYy2 - evalAtXforYy1; evalAtXforYret = ((evalAtXforYdx1) * evalAtXforYdy / evalAtXforYdx + evalAtXforYy1); return (Unit)evalAtXforYret; } - static inline typename high_precision_type::type evalAtXforY(Unit xIn, Point pt, Point other_pt) { + static inline typename high_precision_type::type evalAtXforY(Unit xIn, Point pt, Point other_pt) { typename high_precision_type::type - evalAtXforYret, evalAtXforYxIn, evalAtXforYx1, evalAtXforYy1, evalAtXforYdx1, evalAtXforYdx, + evalAtXforYret, evalAtXforYxIn, evalAtXforYx1, evalAtXforYy1, evalAtXforYdx1, evalAtXforYdx, evalAtXforYdy, evalAtXforYx2, evalAtXforYy2, evalAtXforY0; //y = (x - x1)dy/dx + y1 //y = (xIn - pt.x)*(other_pt.y-pt.y)/(other_pt.x-pt.x) + pt.y @@ -215,18 +215,18 @@ namespace boost { namespace polygon{ if(evalAtXforYdx1 == evalAtXforY0) return evalAtXforYret = evalAtXforYy1; evalAtXforYx2 = (high_precision)other_pt.get(HORIZONTAL); evalAtXforYy2 = (high_precision)other_pt.get(VERTICAL); - + evalAtXforYdx = evalAtXforYx2 - evalAtXforYx1; evalAtXforYdy = evalAtXforYy2 - evalAtXforYy1; evalAtXforYret = ((evalAtXforYdx1) * evalAtXforYdy / evalAtXforYdx + evalAtXforYy1); return evalAtXforYret; } - + struct evalAtXforYPack { typename high_precision_type::type - evalAtXforYret, evalAtXforYxIn, evalAtXforYx1, evalAtXforYy1, evalAtXforYdx1, evalAtXforYdx, + evalAtXforYret, evalAtXforYxIn, evalAtXforYx1, evalAtXforYy1, evalAtXforYdx1, evalAtXforYdx, evalAtXforYdy, evalAtXforYx2, evalAtXforYy2, evalAtXforY0; - inline const typename high_precision_type::type& evalAtXforY(Unit xIn, Point pt, Point other_pt) { + inline const typename high_precision_type::type& evalAtXforY(Unit xIn, Point pt, Point other_pt) { //y = (x - x1)dy/dx + y1 //y = (xIn - pt.x)*(other_pt.y-pt.y)/(other_pt.x-pt.x) + pt.y //assert pt.x != other_pt.x @@ -243,7 +243,7 @@ namespace boost { namespace polygon{ if(evalAtXforYdx1 == evalAtXforY0) return evalAtXforYret = evalAtXforYy1; evalAtXforYx2 = (high_precision)other_pt.get(HORIZONTAL); evalAtXforYy2 = (high_precision)other_pt.get(VERTICAL); - + evalAtXforYdx = evalAtXforYx2 - evalAtXforYx1; evalAtXforYdy = evalAtXforYy2 - evalAtXforYy1; evalAtXforYret = ((evalAtXforYdx1) * evalAtXforYdy / evalAtXforYdx + evalAtXforYy1); @@ -254,7 +254,7 @@ namespace boost { namespace polygon{ static inline bool is_vertical(const half_edge& he) { return he.first.get(HORIZONTAL) == he.second.get(HORIZONTAL); } - + static inline bool is_horizontal(const half_edge& he) { return he.first.get(VERTICAL) == he.second.get(VERTICAL); } @@ -274,10 +274,10 @@ namespace boost { namespace polygon{ inline less_half_edge(Unit *x, int *justBefore, evalAtXforYPack * packIn) : x_(x), justBefore_(justBefore), pack_(packIn) {} inline less_half_edge(const less_half_edge& that) : x_(that.x_), justBefore_(that.justBefore_), pack_(that.pack_){} - inline less_half_edge& operator=(const less_half_edge& that) { - x_ = that.x_; - justBefore_ = that.justBefore_; - pack_ = that.pack_; + inline less_half_edge& operator=(const less_half_edge& that) { + x_ = that.x_; + justBefore_ = that.justBefore_; + pack_ = that.pack_; return *this; } inline bool operator () (const half_edge& elm1, const half_edge& elm2) const { if((std::max)(elm1.first.y(), elm1.second.y()) < (std::min)(elm2.first.y(), elm2.second.y())) @@ -346,8 +346,8 @@ namespace boost { namespace polygon{ template static inline void unsigned_add(unsigned_product_type& result, int& result_sign, unsigned_product_type a, int a_sign, unsigned_product_type b, int b_sign) { int switcher = 0; - if(a_sign < 0) switcher += 1; - if(b_sign < 0) switcher += 2; + if(a_sign < 0) switcher += 1; + if(b_sign < 0) switcher += 2; if(a < b) switcher += 4; switch (switcher) { case 0: //both positive @@ -388,7 +388,7 @@ namespace boost { namespace polygon{ struct compute_intersection_pack { typedef typename high_precision_type::type high_precision; high_precision y_high, dx1, dy1, dx2, dy2, x11, x21, y11, y21, x_num, y_num, x_den, y_den, x, y; - static inline bool compute_lazy_intersection(Point& intersection, const half_edge& he1, const half_edge& he2, + static inline bool compute_lazy_intersection(Point& intersection, const half_edge& he1, const half_edge& he2, bool projected = false, bool round_closest = false) { long double y_high, dx1, dy1, dx2, dy2, x11, x21, y11, y21, x_num, y_num, x_den, y_den, x, y; typedef rectangle_data Rectangle; @@ -419,13 +419,13 @@ namespace boost { namespace polygon{ } } //the bounding boxes of the two line segments intersect, so we check closer to find the intersection point - dy2 = (he2.second.get(VERTICAL)) - + dy2 = (he2.second.get(VERTICAL)) - (he2.first.get(VERTICAL)); - dy1 = (he1.second.get(VERTICAL)) - + dy1 = (he1.second.get(VERTICAL)) - (he1.first.get(VERTICAL)); - dx2 = (he2.second.get(HORIZONTAL)) - + dx2 = (he2.second.get(HORIZONTAL)) - (he2.first.get(HORIZONTAL)); - dx1 = (he1.second.get(HORIZONTAL)) - + dx1 = (he1.second.get(HORIZONTAL)) - (he1.first.get(HORIZONTAL)); if(equal_slope_hp(dx1, dy1, dx2, dy2)) return false; //the line segments have different slopes @@ -436,7 +436,7 @@ namespace boost { namespace polygon{ y21 = (he2.first.get(VERTICAL)); //Unit exp_x = ((at)x11 * (at)dy1 * (at)dx2 - (at)x21 * (at)dy2 * (at)dx1 + (at)y21 * (at)dx1 * (at)dx2 - (at)y11 * (at)dx1 * (at)dx2) / ((at)dy1 * (at)dx2 - (at)dy2 * (at)dx1); //Unit exp_y = ((at)y11 * (at)dx1 * (at)dy2 - (at)y21 * (at)dx2 * (at)dy1 + (at)x21 * (at)dy1 * (at)dy2 - (at)x11 * (at)dy1 * (at)dy2) / ((at)dx1 * (at)dy2 - (at)dx2 * (at)dy1); - x_num = (x11 * dy1 * dx2 - x21 * dy2 * dx1 + y21 * dx1 * dx2 - y11 * dx1 * dx2); + x_num = (x11 * dy1 * dx2 - x21 * dy2 * dx1 + y21 * dx1 * dx2 - y11 * dx1 * dx2); x_den = (dy1 * dx2 - dy2 * dx1); y_num = (y11 * dx1 * dy2 - y21 * dx2 * dy1 + x21 * dy1 * dy2 - x11 * dy1 * dy2); y_den = (dx1 * dy2 - dx2 * dy1); @@ -468,9 +468,9 @@ namespace boost { namespace polygon{ if(!projected && !contains(rect1, result, true)) return false; if(!projected && !contains(rect2, result, true)) return false; if(projected) { - rectangle_data inf_rect(-(long double)(std::numeric_limits::max)(), - -(long double) (std::numeric_limits::max)(), - (long double)(std::numeric_limits::max)(), + rectangle_data inf_rect(-(long double)(std::numeric_limits::max)(), + -(long double) (std::numeric_limits::max)(), + (long double)(std::numeric_limits::max)(), (long double) (std::numeric_limits::max)() ); if(contains(inf_rect, point_data(x, y), true)) { intersection = result; @@ -482,11 +482,11 @@ namespace boost { namespace polygon{ return true; } - inline bool compute_intersection(Point& intersection, const half_edge& he1, const half_edge& he2, + inline bool compute_intersection(Point& intersection, const half_edge& he1, const half_edge& he2, bool projected = false, bool round_closest = false) { if(!projected && !intersects(he1, he2)) return false; - bool lazy_success = compute_lazy_intersection(intersection, he1, he2, projected); + bool lazy_success = compute_lazy_intersection(intersection, he1, he2, projected); if(!projected) { if(lazy_success) { if(intersects_grid(intersection, he1) && @@ -499,7 +499,7 @@ namespace boost { namespace polygon{ return compute_exact_intersection(intersection, he1, he2, projected, round_closest); } - inline bool compute_exact_intersection(Point& intersection, const half_edge& he1, const half_edge& he2, + inline bool compute_exact_intersection(Point& intersection, const half_edge& he1, const half_edge& he2, bool projected = false, bool round_closest = false) { if(!projected && !intersects(he1, he2)) return false; @@ -531,13 +531,13 @@ namespace boost { namespace polygon{ } } //the bounding boxes of the two line segments intersect, so we check closer to find the intersection point - dy2 = (high_precision)(he2.second.get(VERTICAL)) - + dy2 = (high_precision)(he2.second.get(VERTICAL)) - (high_precision)(he2.first.get(VERTICAL)); - dy1 = (high_precision)(he1.second.get(VERTICAL)) - + dy1 = (high_precision)(he1.second.get(VERTICAL)) - (high_precision)(he1.first.get(VERTICAL)); - dx2 = (high_precision)(he2.second.get(HORIZONTAL)) - + dx2 = (high_precision)(he2.second.get(HORIZONTAL)) - (high_precision)(he2.first.get(HORIZONTAL)); - dx1 = (high_precision)(he1.second.get(HORIZONTAL)) - + dx1 = (high_precision)(he1.second.get(HORIZONTAL)) - (high_precision)(he1.first.get(HORIZONTAL)); if(equal_slope_hp(dx1, dy1, dx2, dy2)) return false; //the line segments have different slopes @@ -548,13 +548,13 @@ namespace boost { namespace polygon{ y21 = (high_precision)(he2.first.get(VERTICAL)); //Unit exp_x = ((at)x11 * (at)dy1 * (at)dx2 - (at)x21 * (at)dy2 * (at)dx1 + (at)y21 * (at)dx1 * (at)dx2 - (at)y11 * (at)dx1 * (at)dx2) / ((at)dy1 * (at)dx2 - (at)dy2 * (at)dx1); //Unit exp_y = ((at)y11 * (at)dx1 * (at)dy2 - (at)y21 * (at)dx2 * (at)dy1 + (at)x21 * (at)dy1 * (at)dy2 - (at)x11 * (at)dy1 * (at)dy2) / ((at)dx1 * (at)dy2 - (at)dx2 * (at)dy1); - x_num = (x11 * dy1 * dx2 - x21 * dy2 * dx1 + y21 * dx1 * dx2 - y11 * dx1 * dx2); + x_num = (x11 * dy1 * dx2 - x21 * dy2 * dx1 + y21 * dx1 * dx2 - y11 * dx1 * dx2); x_den = (dy1 * dx2 - dy2 * dx1); y_num = (y11 * dx1 * dy2 - y21 * dx2 * dy1 + x21 * dy1 * dy2 - x11 * dy1 * dy2); y_den = (dx1 * dy2 - dx2 * dy1); x = x_num / x_den; y = y_num / y_den; - //std::cout << x << " " << y << std::endl; + //std::cout << x << " " << y << std::endl; //std::cout << "cross1 " << dy1 << " " << dx2 << " " << dy1 * dx2 << std::endl; //std::cout << "cross2 " << dy2 << " " << dx1 << " " << dy2 * dx1 << std::endl; //Unit exp_x = compute_x_intercept(x11, x21, y11, y21, dy1, dy2, dx1, dx2); @@ -621,13 +621,13 @@ namespace boost { namespace polygon{ } } //the bounding boxes of the two line segments intersect, so we check closer to find the intersection point - high_precision dy2 = (high_precision)(he2.second.get(VERTICAL)) - + high_precision dy2 = (high_precision)(he2.second.get(VERTICAL)) - (high_precision)(he2.first.get(VERTICAL)); - high_precision dy1 = (high_precision)(he1.second.get(VERTICAL)) - + high_precision dy1 = (high_precision)(he1.second.get(VERTICAL)) - (high_precision)(he1.first.get(VERTICAL)); - high_precision dx2 = (high_precision)(he2.second.get(HORIZONTAL)) - + high_precision dx2 = (high_precision)(he2.second.get(HORIZONTAL)) - (high_precision)(he2.first.get(HORIZONTAL)); - high_precision dx1 = (high_precision)(he1.second.get(HORIZONTAL)) - + high_precision dx1 = (high_precision)(he1.second.get(HORIZONTAL)) - (high_precision)(he1.first.get(HORIZONTAL)); if(equal_slope_hp(dx1, dy1, dx2, dy2)) return false; //the line segments have different slopes @@ -638,7 +638,7 @@ namespace boost { namespace polygon{ high_precision y21 = (high_precision)(he2.first.get(VERTICAL)); //Unit exp_x = ((at)x11 * (at)dy1 * (at)dx2 - (at)x21 * (at)dy2 * (at)dx1 + (at)y21 * (at)dx1 * (at)dx2 - (at)y11 * (at)dx1 * (at)dx2) / ((at)dy1 * (at)dx2 - (at)dy2 * (at)dx1); //Unit exp_y = ((at)y11 * (at)dx1 * (at)dy2 - (at)y21 * (at)dx2 * (at)dy1 + (at)x21 * (at)dy1 * (at)dy2 - (at)x11 * (at)dy1 * (at)dy2) / ((at)dx1 * (at)dy2 - (at)dx2 * (at)dy1); - high_precision x_num = (x11 * dy1 * dx2 - x21 * dy2 * dx1 + y21 * dx1 * dx2 - y11 * dx1 * dx2); + high_precision x_num = (x11 * dy1 * dx2 - x21 * dy2 * dx1 + y21 * dx1 * dx2 - y11 * dx1 * dx2); high_precision x_den = (dy1 * dx2 - dy2 * dx1); high_precision y_num = (y11 * dx1 * dy2 - y21 * dx2 * dy1 + x21 * dy1 * dy2 - x11 * dy1 * dy2); high_precision y_den = (dx1 * dy2 - dx2 * dy1); @@ -708,14 +708,14 @@ namespace boost { namespace polygon{ } } int oab1 = on_above_or_below(he1.first, he2); - if(oab1 == 0 && between(he1.first, he2.first, he2.second)) return true; + if(oab1 == 0 && between(he1.first, he2.first, he2.second)) return true; int oab2 = on_above_or_below(he1.second, he2); - if(oab2 == 0 && between(he1.second, he2.first, he2.second)) return true; + if(oab2 == 0 && between(he1.second, he2.first, he2.second)) return true; if(oab1 == oab2 && oab1 != 0) return false; //both points of he1 are on same side of he2 int oab3 = on_above_or_below(he2.first, he1); - if(oab3 == 0 && between(he2.first, he1.first, he1.second)) return true; + if(oab3 == 0 && between(he2.first, he1.first, he1.second)) return true; int oab4 = on_above_or_below(he2.second, he1); - if(oab4 == 0 && between(he2.second, he1.first, he1.second)) return true; + if(oab4 == 0 && between(he2.second, he1.first, he1.second)) return true; if(oab3 == oab4) return false; //both points of he2 are on same side of he1 return true; //they must cross } @@ -737,7 +737,7 @@ namespace boost { namespace polygon{ inline vertex_half_edge() : pt(), other_pt(), count() {} inline vertex_half_edge(const Point& point, const Point& other_point, int countIn) : pt(point), other_pt(other_point), count(countIn) {} inline vertex_half_edge(const vertex_half_edge& vertex) : pt(vertex.pt), other_pt(vertex.other_pt), count(vertex.count) {} - inline vertex_half_edge& operator=(const vertex_half_edge& vertex){ + inline vertex_half_edge& operator=(const vertex_half_edge& vertex){ pt = vertex.pt; other_pt = vertex.other_pt; count = vertex.count; return *this; } inline vertex_half_edge(const std::pair& vertex) : pt(), other_pt(), count() {} inline vertex_half_edge& operator=(const std::pair& vertex){ return *this; } @@ -846,7 +846,7 @@ namespace boost { namespace polygon{ typedef typename scanline_base::half_edge half_edge; typedef typename scanline_base::vertex_half_edge vertex_half_edge; typedef typename scanline_base::less_vertex_half_edge less_vertex_half_edge; - + class poly_line_arbitrary { public: typedef typename std::list::const_iterator iterator; @@ -868,7 +868,7 @@ namespace boost { namespace polygon{ // copy constructor (since we have dynamic memory) inline poly_line_arbitrary(const poly_line_arbitrary& that) : points(that.points) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline poly_line_arbitrary& operator=(const poly_line_arbitrary& that) { points = that.points; @@ -884,31 +884,31 @@ namespace boost { namespace polygon{ inline std::size_t size() const { return points.size(); } //public data member - std::list points; + std::list points; }; class active_tail_arbitrary { protected: //data - poly_line_arbitrary* tailp_; + poly_line_arbitrary* tailp_; active_tail_arbitrary *otherTailp_; std::list holesList_; bool head_; public: - + /** * @brief iterator over coordinates of the figure */ typedef typename poly_line_arbitrary::iterator iterator; - + /** * @brief iterator over holes contained within the figure */ typedef typename std::list::const_iterator iteratorHoles; - + //default constructor inline active_tail_arbitrary() : tailp_(), otherTailp_(), holesList_(), head_() {} - + //constructor inline active_tail_arbitrary(const vertex_half_edge& vertex, active_tail_arbitrary* otherTailp = 0) : tailp_(), otherTailp_(), holesList_(), head_() { tailp_ = new poly_line_arbitrary; @@ -925,7 +925,7 @@ namespace boost { namespace polygon{ tailp_->points.push_back(point); head_ = head; otherTailp_ = otherTailp; - + } inline active_tail_arbitrary(active_tail_arbitrary* otherTailp) : tailp_(), otherTailp_(), holesList_(), head_() { @@ -970,7 +970,7 @@ namespace boost { namespace polygon{ * @brief get the pointer to the activetail at the other end of the chain */ inline active_tail_arbitrary* getOtherActiveTail() const { return otherTailp_; } - + /** * @brief test if another active tail is the other end of the chain */ @@ -1107,7 +1107,7 @@ namespace boost { namespace polygon{ * returns a handle to a hole if one is closed */ template - static inline active_tail_arbitrary* joinChains(Point point, active_tail_arbitrary* at1, active_tail_arbitrary* at2, bool solid, + static inline active_tail_arbitrary* joinChains(Point point, active_tail_arbitrary* at1, active_tail_arbitrary* at2, bool solid, cT& output) { if(at1->otherTailp_ == at2) { //if(at2->otherTailp_ != at1) std::cout << "half closed error\n"; @@ -1179,7 +1179,7 @@ namespace boost { namespace polygon{ //std::cout << this << " " << tailp_ << " " << otherTailp_ << " " << holesList_.size() << " " << head_ << std::endl; } - static inline std::pair createActiveTailsAsPair(Point point, bool solid, + static inline std::pair createActiveTailsAsPair(Point point, bool solid, active_tail_arbitrary* phole, bool fractureHoles) { active_tail_arbitrary* at1 = 0; active_tail_arbitrary* at2 = 0; @@ -1195,7 +1195,7 @@ namespace boost { namespace polygon{ at2 = new active_tail_arbitrary(at1); at1->otherTailp_ = at2; at2->head_ = !solid; - if(phole) + if(phole) at2->addHole(phole); //assert fractureHoles == false } return std::pair(at1, at2); @@ -1219,19 +1219,19 @@ namespace boost { namespace polygon{ static inline void sort_vertex_arbitrary_count(vertex_arbitrary_count& count, const Point& pt) { less_half_edge_count lfec(pt); - gtlsort(count.begin(), count.end(), lfec); + polygon_sort(count.begin(), count.end(), lfec); } typedef std::vector, int>, active_tail_arbitrary*> > incoming_count; - class less_incoming_count : public std::binary_function, int>, active_tail_arbitrary*>, + class less_incoming_count : public std::binary_function, int>, active_tail_arbitrary*>, std::pair, int>, active_tail_arbitrary*>, bool> { private: Point pt_; public: inline less_incoming_count() : pt_() {} inline less_incoming_count(Point point) : pt_(point) {} - inline bool operator () (const std::pair, int>, active_tail_arbitrary*>& elm1, + inline bool operator () (const std::pair, int>, active_tail_arbitrary*>& elm1, const std::pair, int>, active_tail_arbitrary*>& elm2) const { Unit dx1 = elm1.first.first.first.get(HORIZONTAL) - elm1.first.first.second.get(HORIZONTAL); Unit dx2 = elm2.first.first.first.get(HORIZONTAL) - elm2.first.first.second.get(HORIZONTAL); @@ -1243,7 +1243,7 @@ namespace boost { namespace polygon{ static inline void sort_incoming_count(incoming_count& count, const Point& pt) { less_incoming_count lfec(pt); - gtlsort(count.begin(), count.end(), lfec); + polygon_sort(count.begin(), count.end(), lfec); } static inline void compact_vertex_arbitrary_count(const Point& pt, vertex_arbitrary_count &count) { @@ -1282,7 +1282,7 @@ namespace boost { namespace polygon{ count.push_back(std::pair(vertex.other_pt, vertex.count)); } inline vertex_arbitrary_compact(const vertex_arbitrary_compact& vertex) : pt(vertex.pt), count(vertex.count) {} - inline vertex_arbitrary_compact& operator=(const vertex_arbitrary_compact& vertex){ + inline vertex_arbitrary_compact& operator=(const vertex_arbitrary_compact& vertex){ pt = vertex.pt; count = vertex.count; return *this; } //inline vertex_arbitrary_compact(const std::pair& vertex) {} inline vertex_arbitrary_compact& operator=(const std::pair& vertex){ return *this; } @@ -1315,24 +1315,24 @@ namespace boost { namespace polygon{ typedef std::map scanline_data; typedef typename scanline_data::iterator iterator; typedef typename scanline_data::const_iterator const_iterator; - + //data scanline_data scanData_; Unit x_; int justBefore_; - int fractureHoles_; + int fractureHoles_; public: - inline polygon_arbitrary_formation() : + inline polygon_arbitrary_formation() : scanData_(), x_((std::numeric_limits::min)()), justBefore_(false), fractureHoles_(0) { less_vertex_half_edge lessElm(&x_, &justBefore_); scanData_ = scanline_data(lessElm); } - inline polygon_arbitrary_formation(bool fractureHoles) : + inline polygon_arbitrary_formation(bool fractureHoles) : scanData_(), x_((std::numeric_limits::min)()), justBefore_(false), fractureHoles_(fractureHoles) { less_vertex_half_edge lessElm(&x_, &justBefore_); scanData_ = scanline_data(lessElm); } - inline polygon_arbitrary_formation(const polygon_arbitrary_formation& that) : + inline polygon_arbitrary_formation(const polygon_arbitrary_formation& that) : scanData_(), x_((std::numeric_limits::min)()), justBefore_(false), fractureHoles_(0) { (*this) = that; } inline polygon_arbitrary_formation& operator=(const polygon_arbitrary_formation& that) { x_ = that.x_; @@ -1345,7 +1345,7 @@ namespace boost { namespace polygon{ } return *this; } - + //cT is an output container of Polygon45 or Polygon45WithHoles //iT is an iterator over vertex_half_edge elements //inputBegin - inputEnd is a range of sorted iT that represents @@ -1367,8 +1367,8 @@ namespace boost { namespace polygon{ protected: //functions template - inline std::pair, active_tail_arbitrary*> processPoint_(cT& output, cT2& elements, Point point, - incoming_count& counts_from_scanline, vertex_arbitrary_count& incoming_count) { + inline std::pair, active_tail_arbitrary*> processPoint_(cT& output, cT2& elements, Point point, + incoming_count& counts_from_scanline, vertex_arbitrary_count& incoming_count) { //std::cout << "\nAT POINT: " << point << std::endl; //join any closing solid corners std::vector counts; @@ -1387,7 +1387,7 @@ namespace boost { namespace polygon{ incoming.back() = 0; } } - + active_tail_arbitrary* returnValue = 0; std::pair returnCount(Point(0, 0), 0); int i_size_less_1 = (int)(incoming.size()) -1; @@ -1421,7 +1421,7 @@ namespace boost { namespace polygon{ if(counts[j] == 1) { //std::cout << "case1: " << i << " " << j << std::endl; //if a figure is closed it will be written out by this function to output - active_tail_arbitrary::joinChains(point, tails[i], tails[j], true, output); + active_tail_arbitrary::joinChains(point, tails[i], tails[j], true, output); counts[i] = 0; counts[j] = 0; tails[i] = 0; @@ -1447,7 +1447,7 @@ namespace boost { namespace polygon{ if(incoming[j] == -1) { //std::cout << "case2: " << i << " " << j << std::endl; //std::cout << "creating active tail pair\n"; - std::pair tailPair = + std::pair tailPair = active_tail_arbitrary::createActiveTailsAsPair(point, true, 0, fractureHoles_ != 0); //tailPair.first->print(); //tailPair.second->print(); @@ -1459,13 +1459,13 @@ namespace boost { namespace polygon{ } else { //std::cout << "new element " << j-1 << " " << -1 << std::endl; //std::cout << point << " " << incoming_count[j].first << std::endl; - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[j].first, -1), tailPair.first)); } //std::cout << "new element " << i-1 << " " << 1 << std::endl; //std::cout << point << " " << incoming_count[i].first << std::endl; - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[i].first, 1), tailPair.second)); incoming[i] = 0; @@ -1501,8 +1501,8 @@ namespace boost { namespace polygon{ returnCount.first = point; returnCount.second = -1; } else { - elements.push_back(std::pair(vertex_half_edge(point, + elements.push_back(std::pair(vertex_half_edge(point, incoming_count[j].first, incoming[j]), tails[i])); } tails[i] = 0; @@ -1575,7 +1575,7 @@ namespace boost { namespace polygon{ } break; } - } + } } //find beginning of a hole { @@ -1586,14 +1586,14 @@ namespace boost { namespace polygon{ //std::cout << "case6: " << i << " " << j << std::endl; //we are beginning a empty space active_tail_arbitrary* holep = 0; - //if(c_size && counts[c_size_less_1] == 0 && - // counts_from_scanline[c_size_less_1].first.first.first.get(HORIZONTAL) == point.get(HORIZONTAL)) + //if(c_size && counts[c_size_less_1] == 0 && + // counts_from_scanline[c_size_less_1].first.first.first.get(HORIZONTAL) == point.get(HORIZONTAL)) if(have_vertical_tail_from_below) { holep = tails[c_size_less_1]; tails[c_size_less_1] = 0; have_vertical_tail_from_below = false; } - std::pair tailPair = + std::pair tailPair = active_tail_arbitrary::createActiveTailsAsPair(point, false, holep, fractureHoles_ != 0); if(j == i_size_less_1 && incoming_count[j].first.get(HORIZONTAL) == point.get(HORIZONTAL)) { //std::cout << "vertical element " << point << std::endl; @@ -1604,13 +1604,13 @@ namespace boost { namespace polygon{ } else { //std::cout << "new element " << j-1 << " " << incoming[j] << std::endl; //std::cout << point << " " << incoming_count[j].first << std::endl; - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[j].first, incoming[j]), tailPair.first)); } //std::cout << "new element " << i-1 << " " << incoming[i] << std::endl; //std::cout << point << " " << incoming_count[i].first << std::endl; - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[i].first, incoming[i]), tailPair.second)); incoming[i] = 0; @@ -1682,7 +1682,7 @@ namespace boost { namespace polygon{ elementIters.push_back(iter); counts_from_scanline.push_back(std::pair, int>, active_tail_arbitrary*> (std::pair, int>(std::pair(iter->first.pt, - iter->first.other_pt), + iter->first.other_pt), iter->first.count), iter->second)); ++iter; @@ -1722,8 +1722,8 @@ namespace boost { namespace polygon{ //std::cout << "adding vertical tail to counts from scanline\n"; //std::cout << -verticalCount.second << std::endl; counts_from_scanline.push_back(std::pair, int>, active_tail_arbitrary*> - (std::pair, int>(std::pair(verticalCount.first, - currentPoint), + (std::pair, int>(std::pair(verticalCount.first, + currentPoint), -verticalCount.second), verticalTail)); } @@ -1743,7 +1743,7 @@ namespace boost { namespace polygon{ //we got a hole out of the point we just processed //iter is still at the next y element above the current y value in the tree //std::cout << "checking whether ot handle hole\n"; - if(currentIter == inputEnd || + if(currentIter == inputEnd || currentIter->pt.get(HORIZONTAL) != x_ || scanline_base::on_above_or_below(currentIter->pt, half_edge(iter->first.pt, iter->first.other_pt)) != -1) { //(high_precision)(currentIter->pt.get(VERTICAL)) >= iter->first.evalAtX(x_)) { @@ -1791,15 +1791,15 @@ namespace boost { namespace polygon{ //std::cout << "end processEvent\n"; return currentIter; } - + inline iterator lookUp_(Unit y){ //if just before then we need to look from 1 not -1 //std::cout << "just before " << justBefore_ << std::endl; return scanData_.lower_bound(vertex_half_edge(Point(x_, y), Point(x_, y+1), 0)); } - + public: //test functions - + template static inline bool testPolygonArbitraryFormationRect(stream_type& stdcout) { stdcout << "testing polygon formation\n"; @@ -1814,7 +1814,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(10, 0), Point(10, 10), -1)); data.push_back(vertex_half_edge(Point(10, 10), Point(10, 0), 1)); data.push_back(vertex_half_edge(Point(10, 10), Point(0, 10), 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1838,7 +1838,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(10, 10), Point(10, 20), -1)); data.push_back(vertex_half_edge(Point(10, 20), Point(10, 10), 1)); data.push_back(vertex_half_edge(Point(10, 20), Point(0, 10), 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1862,7 +1862,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(2, -4), Point(2, 4), -1)); data.push_back(vertex_half_edge(Point(2, 4), Point(-2, 2), 1)); data.push_back(vertex_half_edge(Point(2, 4), Point(2, -4), 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1908,7 +1908,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(10, 22), Point(10, 12), -1)); data.push_back(vertex_half_edge(Point(10, 22), Point(2, 22), -1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1943,19 +1943,19 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(5, 10), Point(5, 5), 1)); data.push_back(vertex_half_edge(Point(5, 10), Point(0, 10), 1)); - + data.push_back(vertex_half_edge(Point(5, 2), Point(5, 5), -1)); data.push_back(vertex_half_edge(Point(5, 2), Point(7, 2), -1)); - + data.push_back(vertex_half_edge(Point(5, 5), Point(5, 10), -1)); data.push_back(vertex_half_edge(Point(5, 5), Point(5, 2), 1)); data.push_back(vertex_half_edge(Point(5, 5), Point(10, 5), -1)); data.push_back(vertex_half_edge(Point(5, 5), Point(7, 2), 1)); - + data.push_back(vertex_half_edge(Point(7, 2), Point(5, 5), -1)); data.push_back(vertex_half_edge(Point(7, 2), Point(5, 2), 1)); - - gtlsort(data.begin(), data.end()); + + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -1985,17 +1985,17 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(5, 10), Point(4, 1), -1)); data.push_back(vertex_half_edge(Point(5, 10), Point(0, 10), 1)); - + data.push_back(vertex_half_edge(Point(4, 1), Point(5, 10), 1)); data.push_back(vertex_half_edge(Point(4, 1), Point(7, 2), -1)); - + data.push_back(vertex_half_edge(Point(5, 5), Point(10, 5), -1)); data.push_back(vertex_half_edge(Point(5, 5), Point(7, 2), 1)); - + data.push_back(vertex_half_edge(Point(7, 2), Point(5, 5), -1)); data.push_back(vertex_half_edge(Point(7, 2), Point(4, 1), 1)); - - gtlsort(data.begin(), data.end()); + + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2025,17 +2025,17 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(6, 10), Point(4, 1), -1)); data.push_back(vertex_half_edge(Point(6, 10), Point(0, 10), 1)); - + data.push_back(vertex_half_edge(Point(4, 1), Point(6, 10), 1)); data.push_back(vertex_half_edge(Point(4, 1), Point(7, 2), -1)); - + data.push_back(vertex_half_edge(Point(5, 5), Point(10, 5), -1)); data.push_back(vertex_half_edge(Point(5, 5), Point(7, 2), 1)); - + data.push_back(vertex_half_edge(Point(7, 2), Point(5, 5), -1)); data.push_back(vertex_half_edge(Point(7, 2), Point(4, 1), 1)); - - gtlsort(data.begin(), data.end()); + + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2063,7 +2063,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(-1, 4), Point(0, 2), -1)); data.push_back(vertex_half_edge(Point(0, 2), Point(-1, 4), 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2120,7 +2120,7 @@ namespace boost { namespace polygon{ return b; } - + }; template @@ -2134,7 +2134,7 @@ namespace boost { namespace polygon{ typedef Unit coordinate_type; typedef typename active_tail_arbitrary::iterator iterator_type; //typedef iterator_points_to_compact compact_iterator_type; - + typedef iterator_type iterator; inline poly_line_arbitrary_hole_data() : p_(0) {} inline poly_line_arbitrary_hole_data(active_tail_arbitrary* p) : p_(p) {} @@ -2174,7 +2174,7 @@ namespace boost { namespace polygon{ typedef poly_line_arbitrary_hole_data holeType; mutable holeType hole_; typename active_tail_arbitrary::iteratorHoles itr_; - + public: typedef std::forward_iterator_tag iterator_category; typedef holeType value_type; @@ -2183,7 +2183,7 @@ namespace boost { namespace polygon{ typedef const holeType& reference; //immutable inline iterator_holes_type() : hole_(), itr_() {} inline iterator_holes_type(typename active_tail_arbitrary::iteratorHoles itr) : hole_(), itr_(itr) {} - inline iterator_holes_type(const iterator_holes_type& that) : hole_(that.hole_), itr_(that.itr_) {} + inline iterator_holes_type(const iterator_holes_type& that) : hole_(that.hole_), itr_(that.itr_) {} inline iterator_holes_type& operator=(const iterator_holes_type& that) { itr_ = that.itr_; return *this; @@ -2241,7 +2241,7 @@ namespace boost { namespace polygon{ typedef typename scanline_base::half_edge half_edge; typedef typename scanline_base::vertex_half_edge vertex_half_edge; typedef typename scanline_base::less_vertex_half_edge less_vertex_half_edge; - + typedef typename polygon_arbitrary_formation::poly_line_arbitrary poly_line_arbitrary; typedef typename polygon_arbitrary_formation::active_tail_arbitrary active_tail_arbitrary; @@ -2261,7 +2261,7 @@ namespace boost { namespace polygon{ typedef std::map scanline_data; typedef typename scanline_data::iterator iterator; typedef typename scanline_data::const_iterator const_iterator; - + //data public: inline trapezoid_arbitrary_formation() : polygon_arbitrary_formation() {} @@ -2270,7 +2270,7 @@ namespace boost { namespace polygon{ * static_cast*>(this) = * static_cast*>(&that); return *this; } - + //cT is an output container of Polygon45 or Polygon45WithHoles //iT is an iterator over vertex_half_edge elements //inputBegin - inputEnd is a range of sorted iT that represents @@ -2291,14 +2291,14 @@ namespace boost { namespace polygon{ private: //functions - inline void getVerticalPair_(std::pair& verticalPair, + inline void getVerticalPair_(std::pair& verticalPair, iterator previter) { active_tail_arbitrary* iterTail = (*previter).second; - Point prevPoint(polygon_arbitrary_formation::x_, + Point prevPoint(polygon_arbitrary_formation::x_, convert_high_precision_type(previter->first.evalAtX(polygon_arbitrary_formation::x_))); iterTail->pushPoint(prevPoint); - std::pair tailPair = + std::pair tailPair = active_tail_arbitrary::createActiveTailsAsPair(prevPoint, true, 0, false); verticalPair.first = iterTail; verticalPair.second = tailPair.first; @@ -2306,11 +2306,11 @@ namespace boost { namespace polygon{ } template - inline std::pair, active_tail_arbitrary*> - processPoint_(cT& output, cT2& elements, + inline std::pair, active_tail_arbitrary*> + processPoint_(cT& output, cT2& elements, std::pair& verticalPair, - iterator previter, Point point, incoming_count& counts_from_scanline, - vertex_arbitrary_count& incoming_count) { + iterator previter, Point point, incoming_count& counts_from_scanline, + vertex_arbitrary_count& incoming_count) { //std::cout << "\nAT POINT: " << point << std::endl; //join any closing solid corners std::vector counts; @@ -2329,7 +2329,7 @@ namespace boost { namespace polygon{ incoming.back() = 0; } } - + active_tail_arbitrary* returnValue = 0; std::pair verticalPairOut; verticalPairOut.first = 0; @@ -2366,7 +2366,7 @@ namespace boost { namespace polygon{ if(counts[j] == 1) { //std::cout << "case1: " << i << " " << j << std::endl; //if a figure is closed it will be written out by this function to output - active_tail_arbitrary::joinChains(point, tails[i], tails[j], true, output); + active_tail_arbitrary::joinChains(point, tails[i], tails[j], true, output); counts[i] = 0; counts[j] = 0; tails[i] = 0; @@ -2392,7 +2392,7 @@ namespace boost { namespace polygon{ if(incoming[j] == -1) { //std::cout << "case2: " << i << " " << j << std::endl; //std::cout << "creating active tail pair\n"; - std::pair tailPair = + std::pair tailPair = active_tail_arbitrary::createActiveTailsAsPair(point, true, 0, polygon_arbitrary_formation::fractureHoles_ != 0); //tailPair.first->print(); //tailPair.second->print(); @@ -2404,13 +2404,13 @@ namespace boost { namespace polygon{ } else { //std::cout << "new element " << j-1 << " " << -1 << std::endl; //std::cout << point << " " << incoming_count[j].first << std::endl; - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[j].first, -1), tailPair.first)); } //std::cout << "new element " << i-1 << " " << 1 << std::endl; //std::cout << point << " " << incoming_count[i].first << std::endl; - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[i].first, 1), tailPair.second)); incoming[i] = 0; @@ -2446,12 +2446,12 @@ namespace boost { namespace polygon{ returnCount.first = point; returnCount.second = -1; } else { - std::pair tailPair = + std::pair tailPair = active_tail_arbitrary::createActiveTailsAsPair(point, true, 0, false); verticalPairOut.first = tails[i]; verticalPairOut.second = tailPair.first; - elements.push_back(std::pair(vertex_half_edge(point, + elements.push_back(std::pair(vertex_half_edge(point, incoming_count[j].first, incoming[j]), tailPair.second)); } tails[i] = 0; @@ -2478,13 +2478,13 @@ namespace boost { namespace polygon{ if(incoming[j] == -1) { //std::cout << "case4: " << i << " " << j << std::endl; //pass through solid on bottom - + //if count from scanline is vertical - if(i == c_size_less_1 && - counts_from_scanline[i].first.first.first.get(HORIZONTAL) == + if(i == c_size_less_1 && + counts_from_scanline[i].first.first.first.get(HORIZONTAL) == point.get(HORIZONTAL)) { //if incoming count is vertical - if(j == i_size_less_1 && + if(j == i_size_less_1 && incoming_count[j].first.get(HORIZONTAL) == point.get(HORIZONTAL)) { returnValue = tails[i]; returnCount.first = point; @@ -2495,13 +2495,13 @@ namespace boost { namespace polygon{ active_tail_arbitrary*>(vertex_half_edge(point, incoming_count[j].first, incoming[j]), tails[i])); } - } else if(j == i_size_less_1 && - incoming_count[j].first.get(HORIZONTAL) == + } else if(j == i_size_less_1 && + incoming_count[j].first.get(HORIZONTAL) == point.get(HORIZONTAL)) { if(verticalPair.first == 0) { getVerticalPair_(verticalPair, previter); } - active_tail_arbitrary::joinChains(point, tails[i], verticalPair.first, true, output); + active_tail_arbitrary::joinChains(point, tails[i], verticalPair.first, true, output); returnValue = verticalPair.second; returnCount.first = point; returnCount.second = 1; @@ -2510,7 +2510,7 @@ namespace boost { namespace polygon{ if(verticalPair.first == 0) { getVerticalPair_(verticalPair, previter); } - active_tail_arbitrary::joinChains(point, tails[i], verticalPair.first, true, output); + active_tail_arbitrary::joinChains(point, tails[i], verticalPair.first, true, output); verticalPair.second->pushPoint(point); elements.push_back(std::pair(vertex_half_edge(point, @@ -2541,8 +2541,8 @@ namespace boost { namespace polygon{ tails[i]->pushPoint(point); verticalPairOut.first = tails[i]; if(j == c_size_less_1 && - counts_from_scanline[j].first.first.first.get(HORIZONTAL) == - point.get(HORIZONTAL)) { + counts_from_scanline[j].first.first.first.get(HORIZONTAL) == + point.get(HORIZONTAL)) { verticalPairOut.second = tails[j]; } else { //need to close a trapezoid below @@ -2561,7 +2561,7 @@ namespace boost { namespace polygon{ } break; } - } + } } //find beginning of a hole { @@ -2581,15 +2581,15 @@ namespace boost { namespace polygon{ returnCount.first = point; returnCount.second = -1; } else { - std::pair tailPair = + std::pair tailPair = active_tail_arbitrary::createActiveTailsAsPair(point, false, 0, false); - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[j].first, incoming[j]), tailPair.second)); verticalPairOut.second = tailPair.first; verticalPairOut.first = verticalPair.first; } - elements.push_back(std::pair(vertex_half_edge(point, incoming_count[i].first, incoming[i]), verticalPair.second)); incoming[i] = 0; @@ -2668,7 +2668,7 @@ namespace boost { namespace polygon{ elementIters.push_back(iter); counts_from_scanline.push_back(std::pair, int>, active_tail_arbitrary*> (std::pair, int>(std::pair(iter->first.pt, - iter->first.other_pt), + iter->first.other_pt), iter->first.count), iter->second)); ++iter; @@ -2708,8 +2708,8 @@ namespace boost { namespace polygon{ //std::cout << "adding vertical tail to counts from scanline\n"; //std::cout << -verticalCount.second << std::endl; counts_from_scanline.push_back(std::pair, int>, active_tail_arbitrary*> - (std::pair, int>(std::pair(verticalCount.first, - currentPoint), + (std::pair, int>(std::pair(verticalCount.first, + currentPoint), -verticalCount.second), verticalTail)); } @@ -2769,7 +2769,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(10, 0), Point(10, 10), -1)); data.push_back(vertex_half_edge(Point(10, 10), Point(10, 0), 1)); data.push_back(vertex_half_edge(Point(10, 10), Point(0, 10), 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2792,7 +2792,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(10, 10), Point(10, 20), -1)); data.push_back(vertex_half_edge(Point(10, 20), Point(10, 10), 1)); data.push_back(vertex_half_edge(Point(10, 20), Point(0, 10), 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2815,7 +2815,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(2, -4), Point(2, 4), -1)); data.push_back(vertex_half_edge(Point(2, 4), Point(-2, 2), 1)); data.push_back(vertex_half_edge(Point(2, 4), Point(2, -4), 1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2860,7 +2860,7 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(10, 22), Point(10, 12), -1)); data.push_back(vertex_half_edge(Point(10, 22), Point(2, 22), -1)); - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2895,19 +2895,19 @@ namespace boost { namespace polygon{ data.push_back(vertex_half_edge(Point(5, 10), Point(5, 5), 1)); data.push_back(vertex_half_edge(Point(5, 10), Point(0, 10), 1)); - + data.push_back(vertex_half_edge(Point(5, 2), Point(5, 5), -1)); data.push_back(vertex_half_edge(Point(5, 2), Point(7, 2), -1)); - + data.push_back(vertex_half_edge(Point(5, 5), Point(5, 10), -1)); data.push_back(vertex_half_edge(Point(5, 5), Point(5, 2), 1)); data.push_back(vertex_half_edge(Point(5, 5), Point(10, 5), -1)); data.push_back(vertex_half_edge(Point(5, 5), Point(7, 2), 1)); - + data.push_back(vertex_half_edge(Point(7, 2), Point(5, 5), -1)); data.push_back(vertex_half_edge(Point(7, 2), Point(5, 2), 1)); - - gtlsort(data.begin(), data.end()); + + polygon_sort(data.begin(), data.end()); pf.scan(polys, data.begin(), data.end()); stdcout << "result size: " << polys.size() << std::endl; for(std::size_t i = 0; i < polys.size(); ++i) { @@ -2917,7 +2917,7 @@ namespace boost { namespace polygon{ return true; } }; - + template struct PolyLineArbitraryByConcept { typedef poly_line_arbitrary_polygon_data type; }; template diff --git a/3party/boost/boost/polygon/detail/polygon_formation.hpp b/3party/boost/boost/polygon/detail/polygon_formation.hpp index 012996271d..a9490cec6d 100644 --- a/3party/boost/boost/polygon/detail/polygon_formation.hpp +++ b/3party/boost/boost/polygon/detail/polygon_formation.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -25,24 +25,24 @@ namespace polygon_formation { * TAIL End is represented by true because TAIL comes after head and 1 after 0 */ const End TAIL = true; - + /* * 2D turning direction, left and right sides (is a boolean value since it has two states.) */ typedef bool Side; - + /* * LEFT Side is 0 because we inuitively think left to right; left < right */ const Side LEFT = false; - + /* * RIGHT Side is 1 so that right > left */ const Side RIGHT = true; /* - * The PolyLine class is data storage and services for building and representing partial polygons. + * The PolyLine class is data storage and services for building and representing partial polygons. * As the polyline is added to it extends its storage to accomodate the data. * PolyLines can be joined head-to-head/head-to-tail when it is determined that two polylines are * part of the same polygon. @@ -59,20 +59,20 @@ namespace polygon_formation { class PolyLine { private: //data - + /* * ptdata_ a vector of coordiantes * if VERTICAL_HEAD, first coordiante is an X * else first coordinate is a Y */ std::vector ptdata_; - + /* * head and tail points to other polylines before and after this in a chain */ PolyLine* headp_; PolyLine* tailp_; - + /* * state bitmask * bit zero is orientation, 0 H, 1 V @@ -81,24 +81,24 @@ namespace polygon_formation { * bit 3 is solid to left of PolyLine when 1, right when 0 */ int state_; - + public: /* * default constructor (for preallocation) */ PolyLine(); - + /* * constructor that takes the orientation, coordiante and side to which there is solid */ PolyLine(orientation_2d orient, Unit coord, Side side); - + //copy constructor PolyLine(const PolyLine& pline); - + //destructor ~PolyLine(); - + //assignment operator PolyLine& operator=(const PolyLine& that); @@ -118,18 +118,18 @@ namespace polygon_formation { /* * returns true if first coordinate is an X value (first segment is vertical) */ - bool verticalHead() const; + bool verticalHead() const; /* * returns the orientation_2d fo the tail */ orientation_2d tailOrient() const; - + /* * returns true if last coordinate is an X value (last segment is vertical) */ bool verticalTail() const; - + /* * retrun true if PolyLine has odd number of coordiantes */ @@ -157,7 +157,7 @@ namespace polygon_formation { * retrun true if the tail of this polyline is connect to the head of a polyline */ bool tailToHead() const; - + /* * retrun the side on which there is solid for this polyline */ @@ -177,12 +177,12 @@ namespace polygon_formation { * adds a coordinate value to the end of the polyline changing the tail orientation */ PolyLine& pushCoordinate(Unit coord); - + /* * removes a coordinate value at the end of the polyline changing the tail orientation */ PolyLine& popCoordinate(); - + /* * extends the tail of the polyline to include the point, changing orientation if needed */ @@ -299,7 +299,7 @@ namespace polygon_formation { * that edge is supposed to be solid or space. Any incomplete polygon will have two active tails. Active tails * may be joined together to merge two incomplete polygons into a larger incomplete polygon. If two active tails * that are to be merged are the oppositve ends of the same incomplete polygon that indicates that the polygon - * has been closed and is complete. The active tail keeps a pointer to the other active tail of its incomplete + * has been closed and is complete. The active tail keeps a pointer to the other active tail of its incomplete * polygon so that it is easy to check this condition. These pointers are updated when active tails are joined. * The active tail also keeps a list of pointers to active tail objects that serve as handles to closed holes. In * this way a hole can be associated to another incomplete polygon, which will eventually be its enclosing shell, @@ -314,7 +314,7 @@ namespace polygon_formation { class ActiveTail { private: //data - PolyLine* tailp_; + PolyLine* tailp_; ActiveTail *otherTailp_; std::list holesList_; public: @@ -331,7 +331,7 @@ namespace polygon_formation { End startEnd_; public: inline iterator() : pLine_(), pLineEnd_(), index_(), indexEnd_(), startEnd_() {} - inline iterator(const ActiveTail* at, bool isHole, orientation_2d orient) : + inline iterator(const ActiveTail* at, bool isHole, orientation_2d orient) : pLine_(), pLineEnd_(), index_(), indexEnd_(), startEnd_() { //if it is a hole and orientation is vertical or it is not a hole and orientation is horizontal //we want to use this active tail, otherwise we want to use the other active tail @@ -560,7 +560,7 @@ namespace polygon_formation { /* deallocate an activetail object */ template void destroyActiveTail(ActiveTail* aTail); - + template class PolyLineHoleData { private: @@ -586,7 +586,7 @@ namespace polygon_formation { inline PolyLineHoleData& set_compact(iT inputBegin, iT inputEnd) { return *this; } - + }; template @@ -646,7 +646,7 @@ namespace polygon_formation { inline PolyLinePolygonWithHolesData& set_compact(iT inputBegin, iT inputEnd) { return *this; } - + // initialize a polygon from x,y values, it is assumed that the first is an x // and that the input is a well behaved polygon template @@ -679,18 +679,18 @@ namespace polygon_formation { std::vector outputPolygons_; bool fractureHoles_; public: - typedef typename std::vector::iterator iterator; + typedef typename std::vector::iterator iterator; inline ScanLineToPolygonItrs() : tailMap_(), outputPolygons_(), fractureHoles_(false) {} /* construct a scanline with the proper offsets, protocol and options */ inline ScanLineToPolygonItrs(bool fractureHoles) : tailMap_(), outputPolygons_(), fractureHoles_(fractureHoles) {} - + ~ScanLineToPolygonItrs() { clearOutput_(); } - + /* process all vertical edges, left and right, at a unique x coordinate, edges must be sorted low to high */ - void processEdges(iterator& beginOutput, iterator& endOutput, - Unit currentX, std::vector >& leftEdges, + void processEdges(iterator& beginOutput, iterator& endOutput, + Unit currentX, std::vector >& leftEdges, std::vector >& rightEdges); - + private: void clearOutput_(); }; @@ -706,9 +706,9 @@ namespace polygon_formation { // inline ScanLineToPolygons() : scanline_() {} // /* construct a scanline with the proper offsets, protocol and options */ // inline ScanLineToPolygons(bool fractureHoles) : scanline_(fractureHoles) {} - + // /* process all vertical edges, left and right, at a unique x coordinate, edges must be sorted low to high */ -// inline void processEdges(std::vector& outBufferTmp, Unit currentX, std::vector >& leftEdges, +// inline void processEdges(std::vector& outBufferTmp, Unit currentX, std::vector >& leftEdges, // std::vector >& rightEdges) { // typename ScanLineToPolygonItrs::iterator itr, endItr; // scanline_.processEdges(itr, endItr, currentX, leftEdges, rightEdges); @@ -754,7 +754,7 @@ namespace polygon_formation { //constructor template - inline PolyLine::PolyLine(orientation_2d orient, Unit coord, Side side) : + inline PolyLine::PolyLine(orientation_2d orient, Unit coord, Side side) : ptdata_(1, coord), headp_(0), tailp_(0), @@ -796,7 +796,7 @@ namespace polygon_formation { //valid PolyLine template - inline bool PolyLine::isValid() const { + inline bool PolyLine::isValid() const { return state_ > -1; } //first coordinate is an X value @@ -818,7 +818,7 @@ namespace polygon_formation { inline bool PolyLine::verticalTail() const { return to_bool(verticalHead() ^ oddLength()); } - + template inline orientation_2d PolyLine::tailOrient() const { return (verticalTail() ? VERTICAL : HORIZONTAL); @@ -850,16 +850,16 @@ namespace polygon_formation { inline bool PolyLine::tailToHead() const { return to_bool(!tailToTail()); } - + template inline bool PolyLine::tailToTail() const { return to_bool(state_ & TAIL_TO_TAIL); } template - inline Side PolyLine::solidSide() const { + inline Side PolyLine::solidSide() const { return solidToRight(); } - + template inline bool PolyLine::solidToRight() const { return to_bool(state_ & SOLID_TO_RIGHT) != 0; @@ -1010,14 +1010,14 @@ namespace polygon_formation { inline ActiveTail::ActiveTail() : tailp_(0), otherTailp_(0), holesList_() {} template - inline ActiveTail::ActiveTail(orientation_2d orient, Unit coord, Side solidToRight, ActiveTail* otherTailp) : + inline ActiveTail::ActiveTail(orientation_2d orient, Unit coord, Side solidToRight, ActiveTail* otherTailp) : tailp_(0), otherTailp_(0), holesList_() { tailp_ = createPolyLine(orient, coord, solidToRight); otherTailp_ = otherTailp; } template - inline ActiveTail::ActiveTail(PolyLine* active, ActiveTail* otherTailp) : + inline ActiveTail::ActiveTail(PolyLine* active, ActiveTail* otherTailp) : tailp_(active), otherTailp_(otherTailp), holesList_() {} //copy constructor @@ -1026,9 +1026,9 @@ namespace polygon_formation { //destructor template - inline ActiveTail::~ActiveTail() { + inline ActiveTail::~ActiveTail() { //clear them in case the memory is read later - tailp_ = 0; otherTailp_ = 0; + tailp_ = 0; otherTailp_ = 0; } template @@ -1050,33 +1050,33 @@ namespace polygon_formation { } template - inline bool ActiveTail::operator<=(const ActiveTail& b) const { + inline bool ActiveTail::operator<=(const ActiveTail& b) const { return !(*this > b); } - + template - inline bool ActiveTail::operator>(const ActiveTail& b) const { + inline bool ActiveTail::operator>(const ActiveTail& b) const { return b < (*this); } - + template - inline bool ActiveTail::operator>=(const ActiveTail& b) const { + inline bool ActiveTail::operator>=(const ActiveTail& b) const { return !(*this < b); } template - inline PolyLine* ActiveTail::getTail() const { + inline PolyLine* ActiveTail::getTail() const { return tailp_; } template - inline PolyLine* ActiveTail::getOtherTail() const { + inline PolyLine* ActiveTail::getOtherTail() const { return otherTailp_->tailp_; } template - inline ActiveTail* ActiveTail::getOtherActiveTail() const { + inline ActiveTail* ActiveTail::getOtherActiveTail() const { return otherTailp_; } template inline bool ActiveTail::isOtherTail(const ActiveTail& b) { // assert( (tailp_ == b.getOtherTail() && getOtherTail() == b.tailp_) || - // (tailp_ != b.getOtherTail() && getOtherTail() != b.tailp_)) + // (tailp_ != b.getOtherTail() && getOtherTail() != b.tailp_)) // ("ActiveTail: Active tails out of sync"); return otherTailp_ == &b; } @@ -1100,7 +1100,7 @@ namespace polygon_formation { if(other->getOrient() == VERTICAL) { //assert that hole.getOrient() == HORIZONTAL //this case should never happen - h = hole; + h = hole; v = other; } else { //assert that hole.getOrient() == VERTICAL @@ -1128,23 +1128,23 @@ namespace polygon_formation { } template - inline bool ActiveTail::solidToRight() const { + inline bool ActiveTail::solidToRight() const { return getTail()->solidToRight(); } template - inline Unit ActiveTail::getCoord() const { + inline Unit ActiveTail::getCoord() const { return getTail()->getEndCoord(); } - - template - inline Unit ActiveTail::getCoordinate() const { - return getCoord(); } template - inline orientation_2d ActiveTail::getOrient() const { + inline Unit ActiveTail::getCoordinate() const { + return getCoord(); } + + template + inline orientation_2d ActiveTail::getOrient() const { return getTail()->tailOrient(); } template - inline void ActiveTail::pushCoordinate(Unit coord) { + inline void ActiveTail::pushCoordinate(Unit coord) { //appropriately handle any co-linear polyline segments by calling push point internally point_data p; p.set(HORIZONTAL, coord); @@ -1241,16 +1241,16 @@ namespace polygon_formation { if((getOrient() == HORIZONTAL) ^ !isHole) { //our first coordinate is a y value, so we need to rotate it to the end typename std::vector::iterator tmpItr = outVec.begin(); - tmpItr += size; + tmpItr += size; outVec.erase(++tmpItr); //erase the 2nd element } End startEnd = tailp_->endConnectivity(HEAD); if(isHole) startEnd = otherTailp_->tailp_->endConnectivity(HEAD); while(nextPolyLinep) { bool nextStartEnd = nextPolyLinep->endConnectivity(!startEnd); - nextPolyLinep = nextPolyLinep->writeOut(outVec, startEnd); + nextPolyLinep = nextPolyLinep->writeOut(outVec, startEnd); startEnd = nextStartEnd; - } + } if((getOrient() == HORIZONTAL) ^ !isHole) { //we want to push the y value onto the end since we ought to have ended with an x outVec.push_back(firsty); //should never be executed because we want first value to be an x @@ -1284,7 +1284,7 @@ namespace polygon_formation { //solid indicates if it was joined by a solit or a space template - inline ActiveTail* ActiveTail::joinChains(ActiveTail* at1, ActiveTail* at2, bool solid, std::vector& outBufferTmp) + inline ActiveTail* ActiveTail::joinChains(ActiveTail* at1, ActiveTail* at2, bool solid, std::vector& outBufferTmp) { //checks to see if we closed a figure if(at1->isOtherTail(*at2)){ @@ -1298,7 +1298,7 @@ namespace polygon_formation { //because otherwise it would have to have another vertex to the right of this one //and would not be closed at this point return at1; - } else { + } else { //assert pG != 0 //the figure that was closed is a shell at1->writeOutFigure(outBufferTmp); @@ -1334,7 +1334,7 @@ namespace polygon_formation { //solid indicates if it was joined by a solit or a space template template - inline ActiveTail* ActiveTail::joinChains(ActiveTail* at1, ActiveTail* at2, bool solid, + inline ActiveTail* ActiveTail::joinChains(ActiveTail* at1, ActiveTail* at2, bool solid, std::vector& outBufferTmp) { //checks to see if we closed a figure if(at1->isOtherTail(*at2)){ @@ -1348,7 +1348,7 @@ namespace polygon_formation { //because otherwise it would have to have another vertex to the right of this one //and would not be closed at this point return at1; - } else { + } else { //assert pG != 0 //the figure that was closed is a shell outBufferTmp.push_back(at1); @@ -1367,8 +1367,8 @@ namespace polygon_formation { return 0; } - template inline typename std::map::iterator findAtNext(std::map& theMap, - typename std::map::iterator pos, const TKey& key) + template inline typename std::map::iterator findAtNext(std::map& theMap, + typename std::map::iterator pos, const TKey& key) { if(pos == theMap.end()) return theMap.find(key); //if they match the mapItr is pointing to the correct position @@ -1377,22 +1377,22 @@ namespace polygon_formation { } if(pos->first > key) { return theMap.end(); - } + } //else they are equal and no need to do anything to the iterator return pos; } // createActiveTailsAsPair is called in these two end cases of geometry // 1. lower left concave corner - // ###| // ###| - // ###|### + // ###| + // ###|### // ###|### // 2. lower left convex corner - // |### - // |### - // | - // | + // |### + // |### + // | + // | // In case 1 there may be a hole propigated up from the bottom. If the fracture option is enabled // the two active tails that form the filament fracture line edges can become the new active tail pair // by pushing x and y onto them. Otherwise the hole simply needs to be associated to one of the new active tails @@ -1408,7 +1408,7 @@ namespace polygon_formation { (*at2) = ActiveTail(HORIZONTAL, y, !solid, at1); //provide a function through activeTail class to provide this at1->getTail()->joinHeadToHead(*(at2->getTail())); - if(phole) + if(phole) at1->addHole(phole, fractureHoles); //assert fractureHoles == false return std::pair*, ActiveTail*>(at1, at2); } @@ -1427,105 +1427,105 @@ namespace polygon_formation { at2->pushCoordinate(y); return std::pair*, ActiveTail*>(at1, at2); } - + //Process edges connects vertical input edges (right or left edges of figures) to horizontal edges stored as member //data of the scanline object. It also creates now horizontal edges as needed to construct figures from edge data. // - //There are only 12 geometric end cases where the scanline intersects a horizontal edge and even fewer unique + //There are only 12 geometric end cases where the scanline intersects a horizontal edge and even fewer unique //actions to take: // 1. Solid on both sides of the vertical partition after the current position and space on both sides before - // ###|### - // ###|### - // | - // | + // ###|### + // ###|### + // | + // | // This case does not need to be handled because there is no vertical edge at the current x coordinate. // // 2. Solid on both sides of the vertical partition before the current position and space on both sides after - // | - // | - // ###|### - // ###|### + // | + // | + // ###|### + // ###|### // This case does not need to be handled because there is no vertical edge at the current x coordinate. // // 3. Solid on the left of the vertical partition after the current position and space elsewhere - // ###| - // ###| - // | - // | + // ###| + // ###| + // | + // | // The horizontal edge from the left is found and turns upward because of the vertical right edge to become // the currently active vertical edge. // // 4. Solid on the left of the vertical partion before the current position and space elsewhere - // | - // | - // ###| + // | + // | + // ###| // ###| // The horizontal edge from the left is found and joined to the currently active vertical edge. // // 5. Solid to the right above and below and solid to the left above current position. - // ###|### - // ###|### - // |### - // |### + // ###|### + // ###|### + // |### + // |### // The horizontal edge from the left is found and joined to the currently active vertical edge, // potentially closing a hole. // // 6. Solid on the left of the vertical partion before the current position and solid to the right above and below // |### - // |### - // ###|### + // |### + // ###|### // ###|### // The horizontal edge from the left is found and turns upward because of the vertical right edge to become // the currently active vertical edge. // // 7. Solid on the right of the vertical partition after the current position and space elsewhere - // |### - // |### - // | - // | + // |### + // |### + // | + // | // Create two new ActiveTails, one is added to the horizontal edges and the other becomes the vertical currentTail // // 8. Solid on the right of the vertical partion before the current position and space elsewhere - // | - // | - // |### + // | + // | + // |### // |### // The currentTail vertical edge turns right and is added to the horizontal edges data // // 9. Solid to the right above and solid to the left above and below current position. - // ###|### - // ###|### - // ###| + // ###|### + // ###|### + // ###| // ###| // The currentTail vertical edge turns right and is added to the horizontal edges data // // 10. Solid on the left of the vertical partion above and below the current position and solid to the right below - // ###| // ###| - // ###|### + // ###| + // ###|### // ###|### // Create two new ActiveTails, one is added to the horizontal edges data and the other becomes the vertical currentTail // // 11. Solid to the right above and solid to the left below current position. - // |### // |### - // ###| + // |### + // ###| // ###| // The currentTail vertical edge joins the horizontal edge from the left (may close a polygon) // Create two new ActiveTails, one is added to the horizontal edges data and the other becomes the vertical currentTail // // 12. Solid on the left of the vertical partion above the current position and solid to the right below - // ###| // ###| - // |### + // ###| + // |### // |### // The currentTail vertical edge turns right and is added to the horizontal edges data. // The horizontal edge from the left turns upward and becomes the currentTail vertical edge // template inline void ScanLineToPolygonItrs:: - processEdges(iterator& beginOutput, iterator& endOutput, - Unit currentX, std::vector >& leftEdges, + processEdges(iterator& beginOutput, iterator& endOutput, + Unit currentX, std::vector >& leftEdges, std::vector >& rightEdges) { clearOutput_(); typename std::map*>::iterator nextMapItr = tailMap_.begin(); @@ -1551,7 +1551,7 @@ namespace polygon_formation { interval_data & nextEdge = edges[!trailingEdge]; //process this edge if(!bottomAlreadyProcessed) { - //assert currentTail = 0 + //assert currentTail = 0 //process the bottom end of this edge typename std::map*>::iterator thisMapItr = findAtNext(tailMap_, nextMapItr, edge.get(LOW)); @@ -1578,7 +1578,7 @@ namespace polygon_formation { //we need to create one and another one to be the current vertical tail //if this is a trailing edge then there is space to the right of the vertical edge //so pass the inverse of trailingEdge to indicate solid to the right - std::pair*, ActiveTail*> tailPair = + std::pair*, ActiveTail*> tailPair = createActiveTailsAsPair(currentX, edge.get(LOW), !trailingEdge, currentTail, fractureHoles_); currentTail = tailPair.first; tailMap_.insert(nextMapItr, std::pair*>(edge.get(LOW), tailPair.second)); @@ -1606,7 +1606,7 @@ namespace polygon_formation { //two new tails are created, the vertical becomes current tail, the horizontal becomes thisMapItr tail //pass true becuase they are created at the lower left corner of some solid //pass null because there is no hole pointer possible - std::pair*, ActiveTail*> tailPair = + std::pair*, ActiveTail*> tailPair = createActiveTailsAsPair(currentX, edge.get(HIGH), true, 0, fractureHoles_); currentTail = tailPair.first; thisMapItr->second = tailPair.second; @@ -1662,7 +1662,7 @@ namespace polygon_formation { //set current tail to null currentTail = 0; } - } + } //delete thisMapItr from the map tailMap_.erase(thisMapItr); } else { @@ -1675,7 +1675,7 @@ namespace polygon_formation { //leave nextMapItr unchanged, it is still next } } - + //increment index leftIndex += !trailingEdge; rightIndex += trailingEdge; @@ -1804,4 +1804,3 @@ namespace polygon_formation { } } #endif - diff --git a/3party/boost/boost/polygon/detail/polygon_set_view.hpp b/3party/boost/boost/polygon/detail/polygon_set_view.hpp index 693acc4177..661884a201 100644 --- a/3party/boost/boost/polygon/detail/polygon_set_view.hpp +++ b/3party/boost/boost/polygon/detail/polygon_set_view.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -8,8 +8,8 @@ #ifndef BOOST_POLYGON_POLYGON_SET_VIEW_HPP #define BOOST_POLYGON_POLYGON_SET_VIEW_HPP namespace boost { namespace polygon{ - - + + template inline void polygon_set_data::clean() const { if(dirty_) { @@ -20,24 +20,24 @@ namespace boost { namespace polygon{ //that vertices be "linearly consistent" //therefore it doesn't work to fall back on 45-degree //booleans for arbitrary angle polygons - if(0) { //downcast(tmp) ) { - tmp.clean(); - data_.clear(); - is_45_ = true; - polygon_set_data tmp2; - tmp2.insert(tmp); - data_.swap(tmp2.data_); - dirty_ = false; - sort(); - } else { - sort(); - arbitrary_boolean_op abo; - polygon_set_data tmp2; - abo.execute(tmp2, begin(), end(), end(), end(), 0); - data_.swap(tmp2.data_); - is_45_ = tmp2.is_45_; - dirty_ = false; - } + //if(0) { //downcast(tmp) ) { + // tmp.clean(); + // data_.clear(); + // is_45_ = true; + // polygon_set_data tmp2; + // tmp2.insert(tmp); + // data_.swap(tmp2.data_); + // dirty_ = false; + // sort(); + //} else { + sort(); + arbitrary_boolean_op abo; + polygon_set_data tmp2; + abo.execute(tmp2, begin(), end(), end(), end(), 0); + data_.swap(tmp2.data_); + is_45_ = tmp2.is_45_; + dirty_ = false; + //} } } @@ -66,7 +66,7 @@ namespace boost { namespace polygon{ typedef typename polygon_set_view::iterator_type iterator_type; typedef typename polygon_set_view::operator_arg_type operator_arg_type; - static inline iterator_type begin(const polygon_set_view& polygon_set); + static inline iterator_type begin(const polygon_set_view& polygon_set); static inline iterator_type end(const polygon_set_view& polygon_set); static inline bool clean(const polygon_set_view& polygon_set); @@ -99,26 +99,26 @@ namespace boost { namespace polygon{ insert_into_view_arg(linput_, lvalue_); insert_into_view_arg(rinput_, rvalue_); polygon_45_set_data l45, r45, o45; - if(linput_.downcast(l45) && rinput_.downcast(r45)) { - //the op codes are screwed up between 45 and arbitrary -#ifdef BOOST_POLYGON_MSVC -#pragma warning (disable: 4127) -#endif - if(op_type < 2) - l45.template applyAdaptiveBoolean_(o45, r45); - else if(op_type == 2) - l45.template applyAdaptiveBoolean_<3>(o45, r45); - else - l45.template applyAdaptiveBoolean_<2>(o45, r45); -#ifdef BOOST_POLYGON_MSVC -#pragma warning (default: 4127) -#endif - output_.insert(o45); - } else { +// if(linput_.downcast(l45) && rinput_.downcast(r45)) { +// //the op codes are screwed up between 45 and arbitrary +//#ifdef BOOST_POLYGON_MSVC +//#pragma warning (disable: 4127) +//#endif +// if(op_type < 2) +// l45.template applyAdaptiveBoolean_(o45, r45); +// else if(op_type == 2) +// l45.template applyAdaptiveBoolean_<3>(o45, r45); +// else +// l45.template applyAdaptiveBoolean_<2>(o45, r45); +//#ifdef BOOST_POLYGON_MSVC +//#pragma warning (default: 4127) +//#endif +// output_.insert(o45); +// } else { arbitrary_boolean_op abo; abo.execute(output_, linput_.begin(), linput_.end(), rinput_.begin(), rinput_.end(), op_type); - } +// } } template @@ -172,11 +172,11 @@ namespace boost { namespace polygon{ } template bool polygon_set_traits >:: - clean(const polygon_set_view& ) { + clean(const polygon_set_view& ) { return true; } template bool polygon_set_traits >:: - sort(const polygon_set_view& ) { + sort(const polygon_set_view& ) { return true; } template @@ -187,7 +187,7 @@ namespace boost { namespace polygon{ itr2 = polygon_set_traits::end(arg); dest.insert(itr1, itr2); } - + template geometry_type_1& self_assignment_boolean_op(geometry_type_1& lvalue_, const geometry_type_2& rvalue_) { typedef geometry_type_1 ltype; @@ -201,13 +201,21 @@ namespace boost { namespace polygon{ // copy constructor template - template + template polygon_set_data::polygon_set_data(const polygon_set_view& that) : data_(that.value().data_), dirty_(that.value().dirty_), unsorted_(that.value().unsorted_), is_45_(that.value().is_45_) {} + // equivalence operator + template + inline bool polygon_set_data::operator==(const polygon_set_data& p) const { + typedef polygon_set_data value_type; + value_type output_; + execute_boolean_op(output_, (*this), p); + return output_.data_.empty(); + } + template struct geometry_concept > { typedef polygon_set_concept type; }; } } #endif - diff --git a/3party/boost/boost/polygon/detail/polygon_simplify.hpp b/3party/boost/boost/polygon/detail/polygon_simplify.hpp index c9a92f3e6f..4871f507e4 100644 --- a/3party/boost/boost/polygon/detail/polygon_simplify.hpp +++ b/3party/boost/boost/polygon/detail/polygon_simplify.hpp @@ -8,19 +8,19 @@ #include namespace boost { namespace polygon { namespace detail { namespace simplify_detail { - + // Does a simplification/optimization pass on the polygon. If a given // vertex lies within "len" of the line segment joining its neighbor // vertices, it is removed. template //T is a model of point concept - std::size_t simplify(std::vector& dst, const std::vector& src, + std::size_t simplify(std::vector& dst, const std::vector& src, typename coordinate_traits< typename point_traits::coordinate_type >::coordinate_distance len) { using namespace boost::polygon; typedef typename point_traits::coordinate_type coordinate_type; - typedef typename coordinate_traits::area_type ftype; + typedef typename coordinate_traits::area_type ftype; typedef typename std::vector::const_iterator iter; std::vector out; @@ -33,7 +33,7 @@ namespace boost { namespace polygon { namespace detail { namespace simplify_deta bool closed = equivalence(src.front(), src.back()); //we need to keep smoothing until we don't find points to remove - //because removing points in the first iteration through the + //because removing points in the first iteration through the //polygon may leave it in a state where more removal is possible bool not_done = true; while(not_done) { @@ -41,7 +41,7 @@ namespace boost { namespace polygon { namespace detail { namespace simplify_deta dst.clear(); return orig_size; } - + // Start with the second, test for the last point // explicitly, and exit after looping back around to the first. ftype len2 = ftype(len) * ftype(len); @@ -49,47 +49,47 @@ namespace boost { namespace polygon { namespace detail { namespace simplify_deta next = i+1; if(next == dst.end()) next = dst.begin(); - + // points A, B, C ftype ax = x(*prev), ay = y(*prev); ftype bx = x(*i), by = y(*i); ftype cx = x(*next), cy = y(*next); - + // vectors AB, BC and AC: ftype abx = bx-ax, aby = by-ay; ftype bcx = cx-bx, bcy = cy-by; ftype acx = cx-ax, acy = cy-ay; - + // dot products ftype ab_ab = abx*abx + aby*aby; ftype bc_bc = bcx*bcx + bcy*bcy; ftype ac_ac = acx*acx + acy*acy; ftype ab_ac = abx*acx + aby*acy; - + // projection of AB along AC ftype projf = ab_ac / ac_ac; ftype projx = acx * projf, projy = acy * projf; - + // perpendicular vector from the line AC to point B (i.e. AB - proj) ftype perpx = abx - projx, perpy = aby - projy; - + // Squared fractional distance of projection. FIXME: can // remove this division, the decisions below can be made with // just the sign of the quotient and a check to see if // abs(numerator) is greater than abs(divisor). ftype f2 = (projx*acx + projy*acx) / ac_ac; - + // Square of the relevant distance from point B: ftype dist2; if (f2 < 0) dist2 = ab_ab; else if(f2 > 1) dist2 = bc_bc; else dist2 = perpx*perpx + perpy*perpy; - + if(dist2 > len2) { prev = i; // bump prev, we didn't remove the segment out.push_back(*i); } - + if(i == dst.begin()) break; } diff --git a/3party/boost/boost/polygon/detail/polygon_sort_adaptor.hpp b/3party/boost/boost/polygon/detail/polygon_sort_adaptor.hpp index 40f16a7e1b..b3561f87d0 100644 --- a/3party/boost/boost/polygon/detail/polygon_sort_adaptor.hpp +++ b/3party/boost/boost/polygon/detail/polygon_sort_adaptor.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -14,22 +14,22 @@ #include -//! @brief gtlsort_adaptor default implementation that calls std::sort +//! @brief polygon_sort_adaptor default implementation that calls std::sort namespace boost { namespace polygon { template struct dummy_to_delay_instantiation{ - typedef int unit_type; // default GTL unit + typedef int unit_type; // default GTL unit }; - //! @brief gtlsort_adaptor default implementation that calls std::sort + //! @brief polygon_sort_adaptor default implementation that calls std::sort template - struct gtlsort_adaptor { + struct polygon_sort_adaptor { //! @brief wrapper that mimics std::sort() function and takes // the same arguments template - static void sort(RandomAccessIterator_Type _First, + static void sort(RandomAccessIterator_Type _First, RandomAccessIterator_Type _Last) { std::sort(_First, _Last); @@ -37,31 +37,31 @@ namespace boost { //! @brief wrapper that mimics std::sort() function overload and takes // the same arguments template - static void sort(RandomAccessIterator_Type _First, - RandomAccessIterator_Type _Last, + static void sort(RandomAccessIterator_Type _First, + RandomAccessIterator_Type _Last, const Pred_Type& _Comp) { std::sort(_First, _Last, _Comp); } }; - //! @brief user level wrapper for sorting quantities + //! @brief user level wrapper for sorting quantities template - void gtlsort(iter_type _b_, iter_type _e_) + void polygon_sort(iter_type _b_, iter_type _e_) { - gtlsort_adaptor::unit_type>::sort(_b_, _e_); + polygon_sort_adaptor::unit_type>::sort(_b_, _e_); } //! @brief user level wrapper for sorting quantities that takes predicate // as additional argument template - void gtlsort(iter_type _b_, iter_type _e_, const pred_type& _pred_) + void polygon_sort(iter_type _b_, iter_type _e_, const pred_type& _pred_) { - gtlsort_adaptor::unit_type>::sort(_b_, _e_, _pred_); + polygon_sort_adaptor::unit_type>::sort(_b_, _e_, _pred_); } - + } // namespace polygon -} // namespace boost +} // namespace boost #endif diff --git a/3party/boost/boost/polygon/detail/property_merge.hpp b/3party/boost/boost/polygon/detail/property_merge.hpp index 77f2614753..b0c843b5de 100644 --- a/3party/boost/boost/polygon/detail/property_merge.hpp +++ b/3party/boost/boost/polygon/detail/property_merge.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -70,8 +70,8 @@ public: //static public member functions template - static inline void - populate_property_merge_data(property_merge_data& pmd, iT input_begin, iT input_end, + static inline void + populate_property_merge_data(property_merge_data& pmd, iT input_begin, iT input_end, const property_type& property, orientation_2d_type orient) { for( ; input_begin != input_end; ++input_begin) { std::pair, std::pair > element; @@ -112,7 +112,7 @@ public: inline void perform_merge(result_type& result, property_merge_data& data) { if(data.empty()) return; //sort - gtlsort(data.begin(), data.end(), less_vertex_data()); + polygon_sort(data.begin(), data.end(), less_vertex_data()); //scanline bool firstIteration = true; scanlinePosition = scanline.end(); @@ -175,7 +175,7 @@ private: //private static member functions static inline void mergeProperty(property_map& lvalue, std::pair& rvalue) { - typename property_map::iterator itr = std::lower_bound(lvalue.begin(), lvalue.end(), rvalue, + typename property_map::iterator itr = std::lower_bound(lvalue.begin(), lvalue.end(), rvalue, lessPropertyCount >()); if(itr == lvalue.end() || (*itr).first != rvalue.first) { @@ -286,7 +286,7 @@ private: inline void processVertex(edge_property_vector& output) { if(!countFromBelow.empty()) { //we are processing an interval of change in scanline state between - //previous vertex position and current vertex position where + //previous vertex position and current vertex position where //count from below represents the change on the interval //foreach scanline element from previous to current we //write the interval on the scanline that is changing @@ -333,7 +333,7 @@ private: if((*tmpitr).second == (*previousScanlinePosition).second) scanline.erase(previousScanlinePosition); } - + } else if(currentY < currentInterval.high()){ //elementY > currentInterval.high() //split the interval between previous and current scanline elements @@ -354,7 +354,7 @@ private: std::pair elementScan; elementScan.first = currentInterval.high(); scanlinePosition = scanline.insert(scanline.end(), elementScan); - } + } } if(scanlinePosition == scanline.end() && currentY < currentInterval.high()) { @@ -423,7 +423,7 @@ private: template inline int assertRedundant(T& t) { if(t.empty()) return 0; - int count = 0; + int count = 0; typename T::iterator itr = t.begin(); if((*itr).second.empty()) ++count; @@ -442,8 +442,8 @@ private: inline void performExtract(T& result, property_merge_data& data) { if(data.empty()) return; //sort - gtlsort(data.begin(), data.end(), less_vertex_data()); - + polygon_sort(data.begin(), data.end(), less_vertex_data()); + //scanline bool firstIteration = true; scanlinePosition = scanline.end(); @@ -528,7 +528,7 @@ private: insertEdges(graph, edge.second.second, previousEdge.second.first); } else { if(!firstIteration){ - //look up regions above previous edge + //look up regions above previous edge propertySetAbove(previousEdge.first.high(), ps, scanline); insertEdges(graph, ps, previousEdge.second.first); insertEdges(graph, ps, previousEdge.second.second); diff --git a/3party/boost/boost/polygon/detail/property_merge_45.hpp b/3party/boost/boost/polygon/detail/property_merge_45.hpp index b85baf7f88..c2feffc98f 100644 --- a/3party/boost/boost/polygon/detail/property_merge_45.hpp +++ b/3party/boost/boost/polygon/detail/property_merge_45.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -30,7 +30,7 @@ namespace boost { namespace polygon{ inline bool operator!=(const CountMerge& count) const { return !((*this) == count); } //inline CountMerge& operator=(int count) { counts[0] = counts[1] = count; return *this; } inline CountMerge& operator=(const CountMerge& count) { counts = count.counts; return *this; } - inline int& operator[](property_type index) { + inline int& operator[](property_type index) { std::vector >::iterator itr = lower_bound(counts.begin(), counts.end(), std::make_pair(index, int(0))); if(itr != counts.end() && itr->first == index) { return itr->second; @@ -72,7 +72,7 @@ namespace boost { namespace polygon{ //output is a std::map, polygon_45_set_data > struct merge_45_output_functor { template - void operator()(cT& output, const CountMerge& count1, const CountMerge& count2, + void operator()(cT& output, const CountMerge& count1, const CountMerge& count2, const Point& pt, int rise, direction_1d end) { typedef typename cT::key_type keytype; keytype left; @@ -98,20 +98,20 @@ namespace boost { namespace polygon{ } }; - typedef typename std::pair::template Scan45CountT > Vertex45Compact; typedef std::vector MergeSetData; - + struct lessVertex45Compact { bool operator()(const Vertex45Compact& l, const Vertex45Compact& r) { return l.first < r.first; } }; - + template static void performMerge(output_type& result, MergeSetData& tsd) { - - gtlsort(tsd.begin(), tsd.end(), lessVertex45Compact()); + + polygon_sort(tsd.begin(), tsd.end(), lessVertex45Compact()); typedef std::vector::template Scan45CountT > > TSD; TSD tsd_; tsd_.reserve(tsd.size()); @@ -149,7 +149,7 @@ namespace boost { namespace polygon{ } } } - + }; diff --git a/3party/boost/boost/polygon/detail/rectangle_formation.hpp b/3party/boost/boost/polygon/detail/rectangle_formation.hpp index d0ae180ea4..22d0f38cac 100644 --- a/3party/boost/boost/polygon/detail/rectangle_formation.hpp +++ b/3party/boost/boost/polygon/detail/rectangle_formation.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -10,14 +10,14 @@ namespace boost { namespace polygon{ namespace rectangle_formation { - template + template class ScanLineToRects { public: typedef T rectangle_type; typedef typename rectangle_traits::coordinate_type coordinate_type; typedef rectangle_data scan_rect_type; private: - + typedef std::set > ScanData; ScanData scanData_; bool haveCurrentRect_; @@ -26,17 +26,17 @@ namespace rectangle_formation { typename rectangle_traits::coordinate_type currentCoordinate_; public: inline ScanLineToRects() : scanData_(), haveCurrentRect_(), currentRect_(), orient_(), currentCoordinate_() {} - + inline ScanLineToRects(orientation_2d orient, rectangle_type model) : scanData_(orientation_2d(orient.to_int() ? VERTICAL : HORIZONTAL)), haveCurrentRect_(false), currentRect_(), orient_(orient), currentCoordinate_() { assign(currentRect_, model); currentCoordinate_ = (std::numeric_limits::max)(); } - + template inline ScanLineToRects& processEdge(CT& rectangles, const interval_data& edge); - + inline ScanLineToRects& nextMajorCoordinate(coordinate_type currentCoordinate) { if(haveCurrentRect_) { scanData_.insert(scanData_.end(), currentRect_); @@ -45,12 +45,12 @@ namespace rectangle_formation { currentCoordinate_ = currentCoordinate; return *this; } - + }; - template inline CT& - processEdge_(CT& rectangles, ST& scanData, const interval_type& edge, - bool& haveCurrentRect, rectangle_type& currentRect, coordinate_type currentCoordinate, orientation_2d orient) + template inline CT& + processEdge_(CT& rectangles, ST& scanData, const interval_type& edge, + bool& haveCurrentRect, rectangle_type& currentRect, coordinate_type currentCoordinate, orientation_2d orient) { typedef typename CT::value_type result_type; bool edgeProcessed = false; @@ -59,15 +59,15 @@ namespace rectangle_formation { //process all rectangles in the scanData that touch the edge typename ST::iterator dataIter = scanData.lower_bound(rectangle_type(edge, edge)); //decrement beginIter until its low is less than edge's low - while((dataIter == scanData.end() || (*dataIter).get(orient).get(LOW) > edge.get(LOW)) && + while((dataIter == scanData.end() || (*dataIter).get(orient).get(LOW) > edge.get(LOW)) && dataIter != scanData.begin()) { --dataIter; } - //process each rectangle until the low end of the rectangle + //process each rectangle until the low end of the rectangle //is greater than the high end of the edge while(dataIter != scanData.end() && - (*dataIter).get(orient).get(LOW) <= edge.get(HIGH)) + (*dataIter).get(orient).get(LOW) <= edge.get(HIGH)) { const rectangle_type& rect = *dataIter; //if the rectangle data intersects the edge at all @@ -111,7 +111,7 @@ namespace rectangle_formation { scanData.insert(nextIter, highRect); } //we are done with this edge - edgeProcessed = true; + edgeProcessed = true; break; } else { //it must be an opening edge @@ -145,8 +145,8 @@ namespace rectangle_formation { } } else { //extend the top of current rect - currentRect.set(orient.get_direction(HIGH), - (std::max)(edge.get(HIGH), + currentRect.set(orient.get_direction(HIGH), + (std::max)(edge.get(HIGH), tmpRect.get(orient.get_direction(HIGH)))); } } else { @@ -155,7 +155,7 @@ namespace rectangle_formation { //create a new current rect currentRect.set(orient.get_perpendicular(), interval_data(currentCoordinate, currentCoordinate)); - currentRect.set(orient, interval_data((std::min)(tmpRect.get(orient).get(LOW), + currentRect.set(orient, interval_data((std::min)(tmpRect.get(orient).get(LOW), edge.get(LOW)), (std::max)(tmpRect.get(orient).get(HIGH), edge.get(HIGH)))); @@ -164,7 +164,7 @@ namespace rectangle_formation { haveCurrentRect = true; currentRect.set(orient.get_perpendicular(), interval_data(currentCoordinate, currentCoordinate)); - currentRect.set(orient, interval_data((std::min)(tmpRect.get(orient).get(LOW), + currentRect.set(orient, interval_data((std::min)(tmpRect.get(orient).get(LOW), edge.get(LOW)), (std::max)(tmpRect.get(orient).get(HIGH), edge.get(HIGH)))); @@ -176,22 +176,22 @@ namespace rectangle_formation { //edgeProcessed = true; } ++dataIter; - } //end while edge intersects rectangle data + } //end while edge intersects rectangle data } if(!edgeProcessed) { if(haveCurrentRect) { - if(currentRect.get(orient.get_perpendicular().get_direction(HIGH)) + if(currentRect.get(orient.get_perpendicular().get_direction(HIGH)) == currentCoordinate && - currentRect.get(orient.get_direction(HIGH)) >= edge.get(LOW)) + currentRect.get(orient.get_direction(HIGH)) >= edge.get(LOW)) { if(currentRect.get(orient.get_direction(HIGH)) > edge.get(LOW)){ rectangle_type tmpRect(currentRect); tmpRect.set(orient.get_direction(HIGH), edge.get(LOW)); scanData.insert(scanData.end(), tmpRect); if(currentRect.get(orient.get_direction(HIGH)) > edge.get(HIGH)) { - currentRect.set(orient, - interval_data(edge.get(HIGH), + currentRect.set(orient, + interval_data(edge.get(HIGH), currentRect.get(orient.get_direction(HIGH)))); return rectangles; } else { @@ -205,7 +205,7 @@ namespace rectangle_formation { } scanData.insert(scanData.end(), currentRect); haveCurrentRect = false; - } + } rectangle_type tmpRect(currentRect); tmpRect.set(orient.get_perpendicular(), interval_data(currentCoordinate, currentCoordinate)); @@ -214,13 +214,13 @@ namespace rectangle_formation { return rectangles; } return rectangles; - + } - template - template - inline - ScanLineToRects& ScanLineToRects::processEdge(CT& rectangles, const interval_data& edge) + template + template + inline + ScanLineToRects& ScanLineToRects::processEdge(CT& rectangles, const interval_data& edge) { processEdge_(rectangles, scanData_, edge, haveCurrentRect_, currentRect_, currentCoordinate_, orient_); return *this; @@ -264,4 +264,3 @@ namespace rectangle_formation { } } #endif - diff --git a/3party/boost/boost/polygon/detail/scan_arbitrary.hpp b/3party/boost/boost/polygon/detail/scan_arbitrary.hpp index 1933eee7ed..0c82fcf148 100644 --- a/3party/boost/boost/polygon/detail/scan_arbitrary.hpp +++ b/3party/boost/boost/polygon/detail/scan_arbitrary.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -17,11 +17,11 @@ namespace boost { namespace polygon{ class line_intersection : public scanline_base { private: typedef typename scanline_base::Point Point; - + //the first point is the vertex and and second point establishes the slope of an edge eminating from the vertex //typedef std::pair half_edge; typedef typename scanline_base::half_edge half_edge; - + //scanline comparator functor typedef typename scanline_base::less_half_edge less_half_edge; typedef typename scanline_base::less_point less_point; @@ -51,7 +51,7 @@ namespace boost { namespace polygon{ // x_ = that.x_; // just_before_ = that.just_before_; // segment_id_ = that.segment_id_; - + // //I cannot simply copy that.edge_scanline_ to this edge_scanline_ becuase the functor store pointers to other members! // less_half_edge lessElm(&x_, &just_before_); // edge_scanline_ = edge_scanline(lessElm); @@ -76,7 +76,7 @@ namespace boost { namespace polygon{ ends.push_back(std::make_pair((*itr).first.first.y(), count)); ends.push_back(std::make_pair((*itr).first.second.y(), -count)); } - gtlsort(ends.begin(), ends.end()); + polygon_sort(ends.begin(), ends.end()); histogram.reserve(ends.size()); histogram.push_back(std::make_pair(ends.front().first, std::make_pair(0, 0))); for(typename std::vector >::iterator itr = ends.begin(); itr != ends.end(); ++itr) { @@ -128,11 +128,11 @@ namespace boost { namespace polygon{ bins[*itr] = std::vector >(); } for(iT itr = begin; itr != end; ++itr) { - typename std::map > >::iterator lb = + typename std::map > >::iterator lb = bins.lower_bound((std::min)((*itr).first.first.y(), (*itr).first.second.y())); if(lb != bins.begin()) --lb; - typename std::map > >::iterator ub = + typename std::map > >::iterator ub = bins.upper_bound((std::max)((*itr).first.first.y(), (*itr).first.second.y())); for( ; lb != ub; ++lb) { (*lb).second.push_back(*itr); @@ -161,7 +161,7 @@ namespace boost { namespace polygon{ } } typename scanline_base::compute_intersection_pack pack_; - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); //find all intersection points for(typename std::vector >::iterator outer = data.begin(); outer != data.end(); ++outer) { @@ -182,7 +182,7 @@ namespace boost { namespace polygon{ //at least one segment has a low y value within the range if(he1 == he2) continue; if((std::min)(he2. first.get(HORIZONTAL), - he2.second.get(HORIZONTAL)) >= + he2.second.get(HORIZONTAL)) >= (std::max)(he1.second.get(HORIZONTAL), he1.first.get(HORIZONTAL))) break; @@ -194,11 +194,11 @@ namespace boost { namespace polygon{ pts.push_back(intersection); intersection_points[(*inner).second].insert(intersection); intersection_points[(*outer).second].insert(intersection); - } + } } } } - gtlsort(pts.begin(), pts.end()); + polygon_sort(pts.begin(), pts.end()); typename std::vector::iterator newend = std::unique(pts.begin(), pts.end()); typename std::vector::iterator lfinger = pts.begin(); //find all segments that interact with intersection points @@ -217,7 +217,7 @@ namespace boost { namespace polygon{ //while(itr2 != newend && (*itr2).get(HORIZONTAL) <= (std::max)(he1.first.get(HORIZONTAL), he1.second.get(HORIZONTAL))) ++itr2; //itr = pts.begin(); //itr2 = pts.end(); - while(lfinger != newend && (*lfinger).x() < startpt.x()) ++lfinger; + while(lfinger != newend && (*lfinger).x() < startpt.x()) ++lfinger; for(typename std::vector::iterator itr = lfinger ; itr != newend && (*itr).x() <= stoppt.x(); ++itr) { if(scanline_base::intersects_grid(*itr, he1)) intersection_points[id1].insert(*itr); @@ -289,7 +289,7 @@ namespace boost { namespace polygon{ std::swap(data[i].first.first, data[i].first.second); } } - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); for(typename std::vector >::iterator outer = data.begin(); outer != data.end(); ++outer) { const half_edge& he1 = (*outer).first; @@ -299,7 +299,7 @@ namespace boost { namespace polygon{ const half_edge& he2 = (*inner).first; if(he1 == he2) continue; if((std::min)(he2. first.get(HORIZONTAL), - he2.second.get(HORIZONTAL)) > + he2.second.get(HORIZONTAL)) > (std::max)(he1.second.get(HORIZONTAL), he1.first.get(HORIZONTAL))) break; @@ -359,7 +359,7 @@ namespace boost { namespace polygon{ tmpPts.reserve(pts.size()); tmpPts.insert(tmpPts.end(), pts.begin(), pts.end()); less_point_down_slope lpds; - gtlsort(tmpPts.begin(), tmpPts.end(), lpds); + polygon_sort(tmpPts.begin(), tmpPts.end(), lpds); segment_edge(output_segments, he, id, tmpPts.begin(), tmpPts.end()); } else { segment_edge(output_segments, he, id, pts.begin(), pts.end()); @@ -432,7 +432,7 @@ namespace boost { namespace polygon{ // edge_scanline_.erase(remove_iter); // } -// static inline void update_segments(std::map >& intersection_points, +// static inline void update_segments(std::map >& intersection_points, // const std::set& segments, Point pt) { // for(std::set::const_iterator itr = segments.begin(); itr != segments.end(); ++itr) { // intersection_points[*itr].insert(pt); @@ -479,7 +479,7 @@ namespace boost { namespace polygon{ // std::vector insertion_edges; // insertion_edges.reserve(intersecting_elements.size()); // std::vector > sloping_ends; -// //do all the work of updating the output of all intersecting +// //do all the work of updating the output of all intersecting // for(typename std::set::iterator inter_iter = intersecting_elements.begin(); // inter_iter != intersecting_elements.end(); ++inter_iter) { // //if it is horizontal update it now and continue @@ -491,7 +491,7 @@ namespace boost { namespace polygon{ // //insert its end points into the vector of sloping ends // const half_edge& he = (*inter_iter).first; // Unit y = evalAtXforY(x_, he.first, he.second); -// Unit y2 = evalAtXforY(x_+1, he.first, he.second); +// Unit y2 = evalAtXforY(x_+1, he.first, he.second); // if(y2 >= y) y2 +=1; //we round up, in exact case we don't worry about overbite of one // else y += 1; //downward sloping round up // sloping_ends.push_back(std::make_pair(y, inter_iter)); @@ -499,9 +499,9 @@ namespace boost { namespace polygon{ // } // } // } - + // //merge sloping element data -// gtlsort(sloping_ends.begin(), sloping_ends.end()); +// polygon_sort(sloping_ends.begin(), sloping_ends.end()); // std::map > sloping_elements; // std::set merge_elements; // for(typename std::vector >::iterator slop_iter = sloping_ends.begin(); @@ -574,7 +574,7 @@ namespace boost { namespace polygon{ // inline void process_scan_event(std::map >& intersection_points) { // just_before_ = true; -// //process end events by removing those segments from the scanline +// //process end events by removing those segments from the scanline // //and insert vertices of all events into intersection queue // Point prev_point((std::numeric_limits::min)(), (std::numeric_limits::min)()); // less_point lp; @@ -591,7 +591,7 @@ namespace boost { namespace polygon{ // lookup_and_remove(he, id); // } else { // //half edge is begin event -// insert_into_scanline(he, id); +// insert_into_scanline(he, id); // //note that they will be immediately removed and reinserted after // //handling their intersection (vertex) // //an optimization would allow them to be processed specially to avoid the redundant @@ -787,7 +787,7 @@ namespace boost { namespace polygon{ print(edges); return false; } - //3 3 2 2: 0; 4 2 0 6: 1; 0 3 6 3: 2; 4 1 5 5: 3; + //3 3 2 2: 0; 4 2 0 6: 1; 0 3 6 3: 2; 4 1 5 5: 3; input.clear(); edges.clear(); input.push_back(std::make_pair(half_edge(Point(3, 3), Point(2, 2)), 0)); @@ -801,7 +801,7 @@ namespace boost { namespace polygon{ print(edges); return false; } - //5 7 1 3: 0; 4 5 2 1: 1; 2 5 2 1: 2; 4 1 5 3: 3; + //5 7 1 3: 0; 4 5 2 1: 1; 2 5 2 1: 2; 4 1 5 3: 3; input.clear(); edges.clear(); input.push_back(std::make_pair(half_edge(Point(5, 7), Point(1, 3)), 0)); @@ -815,7 +815,7 @@ namespace boost { namespace polygon{ print(edges); return false; } - //1 0 -4 -1: 0; 0 0 2 -1: 1; + //1 0 -4 -1: 0; 0 0 2 -1: 1; input.clear(); edges.clear(); input.push_back(std::make_pair(half_edge(Point(1, 0), Point(-4, -1)), 0)); @@ -875,7 +875,7 @@ namespace boost { namespace polygon{ static void print(const std::vector >& vec) { for(std::size_t i = 0; i < vec.size(); ++ i) { // print(vec[i]); - } + } //std::cout << std::endl; } @@ -940,14 +940,14 @@ namespace boost { namespace polygon{ }; //scanline consumes the "flattened" fully intersected line segments produced by - //a pass of line_intersection along with property and count information and performs a + //a pass of line_intersection along with property and count information and performs a //useful operation like booleans or property merge or connectivity extraction template > class scanline : public scanline_base { public: //definitions typedef typename scanline_base::Point Point; - + //the first point is the vertex and and second point establishes the slope of an edge eminating from the vertex //typedef std::pair half_edge; typedef typename scanline_base::half_edge half_edge; @@ -970,7 +970,7 @@ namespace boost { namespace polygon{ //this is the output data type that is created by the scanline before it is post processed based on content of property sets typedef std::pair > half_edge_property; - + //this is the scanline data structure typedef std::map scanline_type; typedef std::pair scanline_element; @@ -987,12 +987,12 @@ namespace boost { namespace polygon{ int just_before_; typename scanline_base::evalAtXforYPack evalAtXforYPack_; public: - inline scanline() : scan_data_(), removal_set_(), insertion_set_(), end_point_queue_(), + inline scanline() : scan_data_(), removal_set_(), insertion_set_(), end_point_queue_(), x_((std::numeric_limits::max)()), y_((std::numeric_limits::max)()), just_before_(false), evalAtXforYPack_() { less_half_edge lessElm(&x_, &just_before_, &evalAtXforYPack_); scan_data_ = scanline_type(lessElm); } - inline scanline(const scanline& that) : scan_data_(), removal_set_(), insertion_set_(), end_point_queue_(), + inline scanline(const scanline& that) : scan_data_(), removal_set_(), insertion_set_(), end_point_queue_(), x_((std::numeric_limits::max)()), y_((std::numeric_limits::max)()), just_before_(false), evalAtXforYPack_() { (*this) = that; } inline scanline& operator=(const scanline& that) { @@ -1037,11 +1037,11 @@ namespace boost { namespace polygon{ Unit y = (std::numeric_limits::min)(); bool first_iteration = true; //we want to return from inside the loop when we hit end or new x -#ifdef BOOST_POLYGON_MSVC +#ifdef BOOST_POLYGON_MSVC #pragma warning( disable: 4127 ) #endif while(true) { - if(begin == end || (!first_iteration && ((*begin).first.first.get(VERTICAL) != y || + if(begin == end || (!first_iteration && ((*begin).first.first.get(VERTICAL) != y || (*begin).first.first.get(HORIZONTAL) != x_))) { //lookup iterator range in scanline for elements coming in from the left //that end at this y @@ -1062,7 +1062,7 @@ namespace boost { namespace polygon{ } if(current_iter != scan_data_.end()) { //get the bottom iterator for elements at this point - //while(evalAtXforY(x_, (*current_iter).first.first, (*current_iter).first.second) >= (high_precision)y && + //while(evalAtXforY(x_, (*current_iter).first.first, (*current_iter).first.second) >= (high_precision)y && while(scanline_base::on_above_or_below(Point(x_, y), (*current_iter).first) != 1 && current_iter != scan_data_.begin()) { --current_iter; @@ -1145,7 +1145,7 @@ namespace boost { namespace polygon{ ++begin; } } -#ifdef BOOST_POLYGON_MSVC +#ifdef BOOST_POLYGON_MSVC #pragma warning( default: 4127 ) #endif @@ -1247,7 +1247,7 @@ namespace boost { namespace polygon{ ++j; } else { int count = mp[i].second; - count += mp2[j].second; + count += mp2[j].second; if(count) { newmp.push_back(mp[i]); newmp.back().second = count; @@ -1313,7 +1313,7 @@ namespace boost { namespace polygon{ output.push_back(vertex_half_edge(he.first, he.second, count)); output.push_back(vertex_half_edge(he.second, he.first, -count)); } - gtlsort(output.begin(), output.end()); + polygon_sort(output.begin(), output.end()); } class test_functor { @@ -1484,12 +1484,12 @@ namespace boost { namespace polygon{ } }; - template , + template , typename output_functor_type = merge_output_functor > class property_merge : public scanline_base { protected: typedef typename scanline_base::Point Point; - + //the first point is the vertex and and second point establishes the slope of an edge eminating from the vertex //typedef std::pair half_edge; typedef typename scanline_base::half_edge half_edge; @@ -1531,7 +1531,7 @@ namespace boost { namespace polygon{ inline void sort_property_merge_data() { less_vertex_data lvd(&evalAtXforYPack_); - gtlsort(pmd.begin(), pmd.end(), lvd); + polygon_sort(pmd.begin(), pmd.end(), lvd); } public: inline property_merge_data& get_property_merge_data() { return pmd; } @@ -1576,7 +1576,7 @@ namespace boost { namespace polygon{ pts.push_back(lines[i].first.first); pts.push_back(lines[i].first.second); } - gtlsort(pts.begin(), pts.end()); + polygon_sort(pts.begin(), pts.end()); for(std::size_t i = 0; i < pts.size(); i+=2) { if(pts[i] != pts[i+1]) { //stdcout << "Non-closed figures after line intersection!\n"; @@ -1590,7 +1590,7 @@ namespace boost { namespace polygon{ protected: template - void insert(const polygon_type& polygon_object, const property_type& property_value, bool is_hole, + void insert(const polygon_type& polygon_object, const property_type& property_value, bool is_hole, polygon_concept ) { bool first_iteration = true; bool second_iteration = true; @@ -1638,10 +1638,10 @@ namespace boost { namespace polygon{ } template - void insert(const polygon_with_holes_type& polygon_with_holes_object, const property_type& property_value, bool is_hole, + void insert(const polygon_with_holes_type& polygon_with_holes_object, const property_type& property_value, bool is_hole, polygon_with_holes_concept tag) { insert(polygon_with_holes_object, property_value, is_hole, polygon_concept()); - for(typename polygon_with_holes_traits::iterator_holes_type itr = + for(typename polygon_with_holes_traits::iterator_holes_type itr = begin_holes(polygon_with_holes_object); itr != end_holes(polygon_with_holes_object); ++itr) { insert(*itr, property_value, !is_hole, polygon_concept()); @@ -1649,7 +1649,7 @@ namespace boost { namespace polygon{ } template - void insert(const rectangle_type& rectangle_object, const property_type& property_value, bool is_hole, + void insert(const rectangle_type& rectangle_object, const property_type& property_value, bool is_hole, rectangle_concept ) { polygon_90_data poly; assign(poly, rectangle_object); @@ -1658,9 +1658,9 @@ namespace boost { namespace polygon{ public: //change to private when done testing - static inline void create_vertex(property_merge_data& pmd, - const Point& current_point, - const Point& next_point, + static inline void create_vertex(property_merge_data& pmd, + const Point& current_point, + const Point& next_point, direction_1d winding, bool is_hole, const property_type& property) { if(current_point == next_point) return; @@ -1669,7 +1669,7 @@ namespace boost { namespace polygon{ current_vertex.first.second = next_point; current_vertex.second.first = property; int multiplier = 1; - if(winding == CLOCKWISE) + if(winding == CLOCKWISE) multiplier = -1; if(is_hole) multiplier *= -1; @@ -1686,7 +1686,7 @@ namespace boost { namespace polygon{ static inline void sort_vertex_half_edges(vertex_data& vertex) { less_half_edge_pair lessF(vertex.first); - gtlsort(vertex.second.begin(), vertex.second.end(), lessF); + polygon_sort(vertex.second.begin(), vertex.second.end(), lessF); } class less_half_edge_pair { @@ -1697,12 +1697,12 @@ namespace boost { namespace polygon{ bool operator()(const half_edge& e1, const half_edge& e2) { const Point& pt1 = e1.first; const Point& pt2 = e2.first; - if(get(pt1, HORIZONTAL) == + if(get(pt1, HORIZONTAL) == get(pt_, HORIZONTAL)) { //vertical edge is always largest return false; } - if(get(pt2, HORIZONTAL) == + if(get(pt2, HORIZONTAL) == get(pt_, HORIZONTAL)) { //if half edge 1 is not vertical its slope is less than that of half edge 2 return get(pt1, HORIZONTAL) != get(pt2, HORIZONTAL); @@ -1791,7 +1791,7 @@ namespace boost { namespace polygon{ si.insert(rect, 333); print(stdcout, si.pmd) << std::endl; - + Point pts[4] = {Point(0, 0), Point(10,-3), Point(13, 8), Point(0, 0) }; polygon_data poly; property_merge si2; @@ -1817,7 +1817,7 @@ namespace boost { namespace polygon{ si5.insert(poly, 444); si5.sort_property_merge_data(); stdcout << (si2.pmd == si5.pmd) << std::endl; - + return true; } @@ -1867,8 +1867,8 @@ namespace boost { namespace polygon{ stdcout << "fail merge 2\n"; return false; } - //Polygon { -4 -1, 3 3, -2 3 } - //Polygon { 0 -4, -4 -2, -2 1 } + //Polygon { -4 -1, 3 3, -2 3 } + //Polygon { 0 -4, -4 -2, -2 1 } si.clear(); pts.clear(); pts.push_back(Point(-4, -1)); @@ -2069,89 +2069,89 @@ stdcout << "Polygon { -2 -2, 0 0, -1 -1 } \n"; //pts.push_back(Point(5624841,9125000)); //pts.push_back(Point(17616200,9125000)); //pts.push_back(Point(17616200,75000)); -pts.push_back(Point(12262940, 6652520 )); pts.push_back(Point(12125750, 6652520 )); pts.push_back(Point(12121272, 6652961 )); pts.push_back(Point(12112981, 6656396 )); pts.push_back(Point(12106636, 6662741 )); pts.push_back(Point(12103201, 6671032 )); pts.push_back(Point(12103201, 6680007 )); pts.push_back(Point(12106636, 6688298 )); -pts.push_back(Point(12109500, 6691780 )); pts.push_back(Point(12748600, 7330890 )); pts.push_back(Point(15762600, 7330890 )); pts.push_back(Point(15904620, 7472900 )); pts.push_back(Point(15909200, 7473030 )); pts.push_back(Point(15935830, 7476006 )); pts.push_back(Point(15992796, 7499602 )); pts.push_back(Point(16036397, 7543203 )); -pts.push_back(Point(16059993, 7600169 )); pts.push_back(Point(16059993, 7661830 )); pts.push_back(Point(16036397, 7718796 )); pts.push_back(Point(15992796, 7762397 )); pts.push_back(Point(15935830, 7785993 )); pts.push_back(Point(15874169, 7785993 )); pts.push_back(Point(15817203, 7762397 )); pts.push_back(Point(15773602, 7718796 )); -pts.push_back(Point(15750006, 7661830 )); pts.push_back(Point(15747030, 7635200 )); pts.push_back(Point(15746900, 7630620 )); pts.push_back(Point(15670220, 7553930 )); pts.push_back(Point(14872950, 7553930 )); pts.push_back(Point(14872950, 7626170 )); -pts.push_back(Point(14869973, 7661280 )); pts.push_back(Point(14846377, 7718246 )); pts.push_back(Point(14802776, 7761847 )); pts.push_back(Point(14745810, 7785443 )); pts.push_back(Point(14684149, 7785443 )); pts.push_back(Point(14627183, 7761847 )); pts.push_back(Point(14583582, 7718246 )); -pts.push_back(Point(14559986, 7661280 )); pts.push_back(Point(14557070, 7636660 )); pts.push_back(Point(14556670, 7625570 )); pts.push_back(Point(13703330, 7625570 )); pts.push_back(Point(13702930, 7636660 )); pts.push_back(Point(13699993, 7661830 )); pts.push_back(Point(13676397, 7718796 )); -pts.push_back(Point(13632796, 7762397 )); pts.push_back(Point(13575830, 7785993 )); pts.push_back(Point(13514169, 7785993 )); pts.push_back(Point(13457203, 7762397 )); pts.push_back(Point(13436270, 7745670 )); pts.push_back(Point(13432940, 7742520 )); pts.push_back(Point(12963760, 7742520 )); -pts.push_back(Point(12959272, 7742961 )); pts.push_back(Point(12950981, 7746396 )); pts.push_back(Point(12944636, 7752741 )); pts.push_back(Point(12941201, 7761032 )); pts.push_back(Point(12941201, 7770007 )); pts.push_back(Point(12944636, 7778298 )); pts.push_back(Point(12947490, 7781780 )); -pts.push_back(Point(13425330, 8259620 )); pts.push_back(Point(15601330, 8259620 )); pts.push_back(Point(15904620, 8562900 )); pts.push_back(Point(15909200, 8563030 )); pts.push_back(Point(15935830, 8566006 )); pts.push_back(Point(15992796, 8589602 )); pts.push_back(Point(16036397, 8633203 )); -pts.push_back(Point(16059993, 8690169 )); pts.push_back(Point(16059993, 8751830 )); pts.push_back(Point(16036397, 8808796 )); pts.push_back(Point(15992796, 8852397 )); pts.push_back(Point(15935830, 8875993 )); pts.push_back(Point(15874169, 8875993 )); pts.push_back(Point(15817203, 8852397 )); pts.push_back(Point(15773602, 8808796 )); -pts.push_back(Point(15750006, 8751830 )); pts.push_back(Point(15747030, 8725200 )); pts.push_back(Point(15746900, 8720620 )); pts.push_back(Point(15508950, 8482660 )); pts.push_back(Point(14689890, 8482660 )); pts.push_back(Point(14685412, 8483101 )); pts.push_back(Point(14677121, 8486536 )); -pts.push_back(Point(14670776, 8492881 )); pts.push_back(Point(14667341, 8501172 )); pts.push_back(Point(14667341, 8510147 )); pts.push_back(Point(14670776, 8518438 )); pts.push_back(Point(14673630, 8521920 )); pts.push_back(Point(14714620, 8562900 )); pts.push_back(Point(14719200, 8563030 )); pts.push_back(Point(14745830, 8566006 )); -pts.push_back(Point(14802796, 8589602 )); pts.push_back(Point(14846397, 8633203 )); pts.push_back(Point(14869993, 8690169 )); pts.push_back(Point(14869993, 8751830 )); pts.push_back(Point(14846397, 8808796 )); pts.push_back(Point(14802796, 8852397 )); pts.push_back(Point(14745830, 8875993 )); pts.push_back(Point(14684169, 8875993 )); -pts.push_back(Point(14627203, 8852397 )); pts.push_back(Point(14583602, 8808796 )); pts.push_back(Point(14560006, 8751830 )); pts.push_back(Point(14557030, 8725200 )); pts.push_back(Point(14556900, 8720620 )); pts.push_back(Point(14408270, 8571980 )); pts.push_back(Point(13696320, 8571980 )); pts.push_back(Point(13696320, 8675520 )); -pts.push_back(Point(13699963, 8690161 )); pts.push_back(Point(13699963, 8751818 )); pts.push_back(Point(13676368, 8808781 )); pts.push_back(Point(13632771, 8852378 )); pts.push_back(Point(13575808, 8875973 )); pts.push_back(Point(13514151, 8875973 )); pts.push_back(Point(13457188, 8852378 )); pts.push_back(Point(13436270, 8835670 )); pts.push_back(Point(13432940, 8832520 )); -pts.push_back(Point(13281760, 8832520 )); pts.push_back(Point(13277272, 8832961 )); pts.push_back(Point(13268981, 8836396 )); pts.push_back(Point(13262636, 8842741 )); pts.push_back(Point(13259201, 8851032 )); pts.push_back(Point(13259201, 8860007 )); pts.push_back(Point(13262636, 8868298 )); pts.push_back(Point(13265500, 8871780 )); -pts.push_back(Point(13518710, 9125000 )); pts.push_back(Point(16270720, 9125000 )); pts.push_back(Point(16270720, 8939590 )); pts.push_back(Point(17120780, 8939590 )); pts.push_back(Point(17120780, 9125000 )); pts.push_back(Point(17616200, 9125000 )); pts.push_back(Point(17616200, 75000 )); pts.push_back(Point(16024790, 75000 )); -pts.push_back(Point(16021460, 80700 )); pts.push_back(Point(16016397, 88796 )); pts.push_back(Point(15972796, 132397 )); pts.push_back(Point(15915830, 155993 )); pts.push_back(Point(15908730, 157240 )); pts.push_back(Point(15905000, 157800 )); pts.push_back(Point(15516800, 546000 )); pts.push_back(Point(15905000, 934200 )); -pts.push_back(Point(15908730, 934760 )); pts.push_back(Point(15915830, 936006 )); pts.push_back(Point(15972796, 959602 )); pts.push_back(Point(16016397, 1003203 )); pts.push_back(Point(16039993, 1060169 )); pts.push_back(Point(16039993, 1121830 )); pts.push_back(Point(16016397, 1178796 )); pts.push_back(Point(15972796, 1222397 )); -pts.push_back(Point(15915830, 1245993 )); pts.push_back(Point(15854169, 1245993 )); pts.push_back(Point(15797203, 1222397 )); pts.push_back(Point(15753602, 1178796 )); pts.push_back(Point(15730006, 1121830 )); pts.push_back(Point(15728760, 1114730 )); pts.push_back(Point(15728200, 1111000 )); pts.push_back(Point(15363500, 746300 )); -pts.push_back(Point(14602620, 746300 )); pts.push_back(Point(14598142, 746741 )); pts.push_back(Point(14589851, 750176 )); pts.push_back(Point(14583506, 756521 )); pts.push_back(Point(14580071, 764812 )); pts.push_back(Point(14580071, 773787 )); pts.push_back(Point(14583506, 782078 )); pts.push_back(Point(14586360, 785560 )); -pts.push_back(Point(14586370, 785560 )); pts.push_back(Point(14735000, 934200 )); pts.push_back(Point(14738730, 934760 )); pts.push_back(Point(14745830, 936006 )); pts.push_back(Point(14802796, 959602 )); pts.push_back(Point(14846397, 1003203 )); pts.push_back(Point(14869993, 1060169 )); -pts.push_back(Point(14870450, 1062550 )); pts.push_back(Point(14872170, 1071980 )); pts.push_back(Point(14972780, 1071980 )); pts.push_back(Point(15925000, 2024200 )); pts.push_back(Point(15928730, 2024760 )); pts.push_back(Point(15935830, 2026006 )); pts.push_back(Point(15992796, 2049602 )); -pts.push_back(Point(16036397, 2093203 )); pts.push_back(Point(16059993, 2150169 )); pts.push_back(Point(16059993, 2211830 )); pts.push_back(Point(16036397, 2268796 )); pts.push_back(Point(15992796, 2312397 )); pts.push_back(Point(15935830, 2335993 )); pts.push_back(Point(15874169, 2335993 )); -pts.push_back(Point(15817203, 2312397 )); pts.push_back(Point(15773602, 2268796 )); pts.push_back(Point(15750006, 2211830 )); pts.push_back(Point(15748760, 2204730 )); pts.push_back(Point(15748200, 2201000 )); pts.push_back(Point(14869220, 1322020 )); pts.push_back(Point(14088350, 1322020 )); -pts.push_back(Point(14083862, 1322461 )); pts.push_back(Point(14075571, 1325896 )); pts.push_back(Point(14069226, 1332241 )); pts.push_back(Point(14065791, 1340532 )); pts.push_back(Point(14065791, 1349507 )); pts.push_back(Point(14069226, 1357798 )); pts.push_back(Point(14072080, 1361280 )); -pts.push_back(Point(14072090, 1361280 )); pts.push_back(Point(14735000, 2024200 )); pts.push_back(Point(14738730, 2024760 )); pts.push_back(Point(14745830, 2026006 )); pts.push_back(Point(14802796, 2049602 )); pts.push_back(Point(14846397, 2093203 )); pts.push_back(Point(14869993, 2150169 )); -pts.push_back(Point(14869993, 2211830 )); pts.push_back(Point(14846397, 2268796 )); pts.push_back(Point(14802796, 2312397 )); pts.push_back(Point(14745830, 2335993 )); pts.push_back(Point(14684169, 2335993 )); pts.push_back(Point(14627203, 2312397 )); pts.push_back(Point(14583602, 2268796 )); pts.push_back(Point(14560006, 2211830 )); -pts.push_back(Point(14558760, 2204730 )); pts.push_back(Point(14558200, 2201000 )); pts.push_back(Point(13752220, 1395020 )); pts.push_back(Point(12991340, 1395020 )); pts.push_back(Point(12986862, 1395461 )); pts.push_back(Point(12978571, 1398896 )); pts.push_back(Point(12972226, 1405241 )); -pts.push_back(Point(12968791, 1413532 )); pts.push_back(Point(12968791, 1422507 )); pts.push_back(Point(12972226, 1430798 )); pts.push_back(Point(12975080, 1434280 )); pts.push_back(Point(12975090, 1434280 )); pts.push_back(Point(13565000, 2024200 )); pts.push_back(Point(13568730, 2024760 )); pts.push_back(Point(13575830, 2026006 )); -pts.push_back(Point(13632796, 2049602 )); pts.push_back(Point(13676397, 2093203 )); pts.push_back(Point(13699993, 2150169 )); pts.push_back(Point(13699993, 2211830 )); pts.push_back(Point(13676397, 2268796 )); pts.push_back(Point(13632796, 2312397 )); pts.push_back(Point(13575830, 2335993 )); -pts.push_back(Point(13514169, 2335993 )); pts.push_back(Point(13457203, 2312397 )); pts.push_back(Point(13413602, 2268796 )); pts.push_back(Point(13390006, 2211830 )); pts.push_back(Point(13388760, 2204730 )); pts.push_back(Point(13388200, 2201000 )); pts.push_back(Point(12655220, 1468020 )); -pts.push_back(Point(11894340, 1468020 )); pts.push_back(Point(11889862, 1468461 )); pts.push_back(Point(11881571, 1471896 )); pts.push_back(Point(11875226, 1478241 )); pts.push_back(Point(11871791, 1486532 )); pts.push_back(Point(11871791, 1495507 )); -pts.push_back(Point(11875226, 1503798 )); pts.push_back(Point(11878090, 1507280 )); pts.push_back(Point(12395000, 2024200 )); pts.push_back(Point(12398730, 2024760 )); pts.push_back(Point(12405830, 2026006 )); pts.push_back(Point(12462796, 2049602 )); pts.push_back(Point(12506397, 2093203 )); -pts.push_back(Point(12529993, 2150169 )); pts.push_back(Point(12529993, 2211830 )); pts.push_back(Point(12506397, 2268796 )); pts.push_back(Point(12462796, 2312397 )); pts.push_back(Point(12405830, 2335993 )); pts.push_back(Point(12344169, 2335993 )); -pts.push_back(Point(12287203, 2312397 )); pts.push_back(Point(12243602, 2268796 )); pts.push_back(Point(12220006, 2211830 )); pts.push_back(Point(12218760, 2204730 )); pts.push_back(Point(12218200, 2201000 )); pts.push_back(Point(11558220, 1541020 )); -pts.push_back(Point(10797340, 1541020 )); pts.push_back(Point(10792862, 1541461 )); pts.push_back(Point(10784571, 1544896 )); pts.push_back(Point(10778226, 1551241 )); pts.push_back(Point(10774791, 1559532 )); pts.push_back(Point(10774791, 1568507 )); pts.push_back(Point(10778226, 1576798 )); pts.push_back(Point(10781080, 1580280 )); -pts.push_back(Point(10781090, 1580280 )); pts.push_back(Point(11225000, 2024200 )); pts.push_back(Point(11228730, 2024760 )); pts.push_back(Point(11235830, 2026006 )); pts.push_back(Point(11292796, 2049602 )); pts.push_back(Point(11336397, 2093203 )); pts.push_back(Point(11359993, 2150169 )); -pts.push_back(Point(11359993, 2211830 )); pts.push_back(Point(11336397, 2268796 )); pts.push_back(Point(11292796, 2312397 )); pts.push_back(Point(11235830, 2335993 )); pts.push_back(Point(11174169, 2335993 )); pts.push_back(Point(11117203, 2312397 )); pts.push_back(Point(11073602, 2268796 )); pts.push_back(Point(11050006, 2211830 )); -pts.push_back(Point(11048760, 2204730 )); pts.push_back(Point(11048200, 2201000 )); pts.push_back(Point(10461220, 1614020 )); pts.push_back(Point( 5647400, 1614020 )); pts.push_back(Point( 5642912, 1614461 )); -pts.push_back(Point( 5634621, 1617896 )); pts.push_back(Point( 5628276, 1624241 )); pts.push_back(Point( 5624841, 1632532 )); pts.push_back(Point( 5624841, 1641507 )); pts.push_back(Point( 5628276, 1649798 )); pts.push_back(Point( 5631130, 1653280 )); -pts.push_back(Point( 5688490, 1710640 )); pts.push_back(Point( 9722350, 1710640 )); pts.push_back(Point(10034620, 2022900 )); pts.push_back(Point(10039200, 2023030 )); pts.push_back(Point(10065830, 2026006 )); pts.push_back(Point(10122796, 2049602 )); -pts.push_back(Point(10166397, 2093203 )); pts.push_back(Point(10189993, 2150169 )); pts.push_back(Point(10189993, 2211830 )); pts.push_back(Point(10166397, 2268796 )); pts.push_back(Point(10158620, 2279450 )); pts.push_back(Point(10158620, 2404900 )); pts.push_back(Point(10548950, 2795240 )); -pts.push_back(Point(15586950, 2795240 )); pts.push_back(Point(15904620, 3112900 )); pts.push_back(Point(15909200, 3113030 )); pts.push_back(Point(15935830, 3116006 )); pts.push_back(Point(15992796, 3139602 )); pts.push_back(Point(16036397, 3183203 )); pts.push_back(Point(16059993, 3240169 )); pts.push_back(Point(16059993, 3301830 )); -pts.push_back(Point(16036397, 3358796 )); pts.push_back(Point(15992796, 3402397 )); pts.push_back(Point(15935830, 3425993 )); pts.push_back(Point(15874169, 3425993 )); pts.push_back(Point(15817203, 3402397 )); pts.push_back(Point(15773602, 3358796 )); pts.push_back(Point(15750006, 3301830 )); pts.push_back(Point(15747030, 3275200 )); -pts.push_back(Point(15746900, 3270620 )); pts.push_back(Point(15494570, 3018280 )); pts.push_back(Point(14675510, 3018280 )); pts.push_back(Point(14671032, 3018721 )); pts.push_back(Point(14662741, 3022156 )); pts.push_back(Point(14656396, 3028501 )); pts.push_back(Point(14652961, 3036792 )); -pts.push_back(Point(14652961, 3045767 )); pts.push_back(Point(14656396, 3054058 )); pts.push_back(Point(14659260, 3057540 )); pts.push_back(Point(14714620, 3112900 )); pts.push_back(Point(14719200, 3113030 )); pts.push_back(Point(14745830, 3116006 )); pts.push_back(Point(14802796, 3139602 )); -pts.push_back(Point(14846397, 3183203 )); pts.push_back(Point(14869993, 3240169 )); pts.push_back(Point(14869993, 3301830 )); pts.push_back(Point(14846397, 3358796 )); pts.push_back(Point(14802796, 3402397 )); pts.push_back(Point(14745830, 3425993 )); pts.push_back(Point(14684169, 3425993 )); pts.push_back(Point(14627203, 3402397 )); -pts.push_back(Point(14583602, 3358796 )); pts.push_back(Point(14560006, 3301830 )); pts.push_back(Point(14557030, 3275200 )); pts.push_back(Point(14556900, 3270620 )); pts.push_back(Point(14370700, 3084410 )); pts.push_back(Point(13702830, 3084410 )); pts.push_back(Point(13702830, 3263160 )); -pts.push_back(Point(13700003, 3302210 )); pts.push_back(Point(13676407, 3359176 )); pts.push_back(Point(13632806, 3402777 )); pts.push_back(Point(13575840, 3426373 )); pts.push_back(Point(13514179, 3426373 )); pts.push_back(Point(13457213, 3402777 )); pts.push_back(Point(13413612, 3359176 )); -pts.push_back(Point(13390016, 3302210 )); pts.push_back(Point(13387030, 3275200 )); pts.push_back(Point(13386900, 3270620 )); pts.push_back(Point(13266840, 3150550 )); pts.push_back(Point(12532920, 3150550 )); pts.push_back(Point(12532920, 3264990 )); pts.push_back(Point(12529993, 3301820 )); -pts.push_back(Point(12506397, 3358786 )); pts.push_back(Point(12462796, 3402387 )); pts.push_back(Point(12405830, 3425983 )); pts.push_back(Point(12344169, 3425983 )); pts.push_back(Point(12287203, 3402387 )); pts.push_back(Point(12243602, 3358786 )); pts.push_back(Point(12220006, 3301820 )); pts.push_back(Point(12217030, 3275200 )); -pts.push_back(Point(12216900, 3270620 )); pts.push_back(Point(12157460, 3211170 )); pts.push_back(Point(11362030, 3211170 )); pts.push_back(Point(11360250, 3220520 )); pts.push_back(Point(11359993, 3221830 )); pts.push_back(Point(11336397, 3278796 )); -pts.push_back(Point(11292796, 3322397 )); pts.push_back(Point(11235830, 3345993 )); pts.push_back(Point(11174169, 3345993 )); pts.push_back(Point(11117203, 3322397 )); pts.push_back(Point(11096270, 3305670 )); pts.push_back(Point(11092940, 3302520 )); pts.push_back(Point(10680760, 3302520 )); -pts.push_back(Point(10676272, 3302961 )); pts.push_back(Point(10667981, 3306396 )); pts.push_back(Point(10661636, 3312741 )); pts.push_back(Point(10658201, 3321032 )); pts.push_back(Point(10658201, 3330007 )); pts.push_back(Point(10661636, 3338298 )); pts.push_back(Point(10664500, 3341780 )); -pts.push_back(Point(11264260, 3941550 )); pts.push_back(Point(15643260, 3941550 )); pts.push_back(Point(15904620, 4202900 )); pts.push_back(Point(15909200, 4203030 )); pts.push_back(Point(15935830, 4206006 )); pts.push_back(Point(15992796, 4229602 )); -pts.push_back(Point(16036397, 4273203 )); pts.push_back(Point(16059993, 4330169 )); pts.push_back(Point(16059993, 4391830 )); pts.push_back(Point(16036397, 4448796 )); pts.push_back(Point(15992796, 4492397 )); -pts.push_back(Point(15935830, 4515993 )); pts.push_back(Point(15874169, 4515993 )); pts.push_back(Point(15817203, 4492397 )); pts.push_back(Point(15773602, 4448796 )); pts.push_back(Point(15750006, 4391830 )); pts.push_back(Point(15747030, 4365200 )); pts.push_back(Point(15746900, 4360620 )); -pts.push_back(Point(15550880, 4164590 )); pts.push_back(Point(14825070, 4164590 )); pts.push_back(Point(14825070, 4247610 )); pts.push_back(Point(14846397, 4273213 )); pts.push_back(Point(14869993, 4330179 )); pts.push_back(Point(14869993, 4391840 )); pts.push_back(Point(14846397, 4448806 )); -pts.push_back(Point(14802796, 4492407 )); pts.push_back(Point(14745830, 4516003 )); pts.push_back(Point(14684169, 4516003 )); pts.push_back(Point(14627203, 4492407 )); pts.push_back(Point(14583602, 4448806 )); pts.push_back(Point(14560006, 4391840 )); pts.push_back(Point(14557030, 4365200 )); -pts.push_back(Point(14556900, 4360620 )); pts.push_back(Point(14432520, 4236230 )); pts.push_back(Point(13702830, 4236230 )); pts.push_back(Point(13702830, 4352930 )); pts.push_back(Point(13699993, 4391750 )); pts.push_back(Point(13676397, 4448716 )); -pts.push_back(Point(13632796, 4492317 )); pts.push_back(Point(13575830, 4515913 )); pts.push_back(Point(13514169, 4515913 )); pts.push_back(Point(13457203, 4492317 )); pts.push_back(Point(13413602, 4448716 )); pts.push_back(Point(13390006, 4391750 )); pts.push_back(Point(13387030, 4365200 )); -pts.push_back(Point(13386900, 4360620 )); pts.push_back(Point(13334170, 4307880 )); pts.push_back(Point(12532990, 4307880 )); pts.push_back(Point(12532990, 4357550 )); pts.push_back(Point(12529993, 4391760 )); pts.push_back(Point(12506397, 4448726 )); pts.push_back(Point(12462796, 4492327 )); -pts.push_back(Point(12405830, 4515923 )); pts.push_back(Point(12344169, 4515923 )); pts.push_back(Point(12287203, 4492327 )); pts.push_back(Point(12243602, 4448726 )); pts.push_back(Point(12220006, 4391760 )); pts.push_back(Point(12217970, 4378710 )); pts.push_back(Point(12216810, 4368500 )); -pts.push_back(Point(11363190, 4368500 )); pts.push_back(Point(11362030, 4378710 )); pts.push_back(Point(11359983, 4391828 )); pts.push_back(Point(11336388, 4448791 )); pts.push_back(Point(11292791, 4492388 )); pts.push_back(Point(11235828, 4515983 )); pts.push_back(Point(11174171, 4515983 )); pts.push_back(Point(11117208, 4492388 )); -pts.push_back(Point(11096270, 4475670 )); pts.push_back(Point(11092940, 4472520 )); pts.push_back(Point(11057750, 4472520 )); pts.push_back(Point(11053272, 4472961 )); pts.push_back(Point(11044981, 4476396 )); pts.push_back(Point(11038636, 4482741 )); pts.push_back(Point(11035201, 4491032 )); -pts.push_back(Point(11035201, 4500007 )); pts.push_back(Point(11038636, 4508298 )); pts.push_back(Point(11041490, 4511780 )); pts.push_back(Point(11573490, 5043780 )); pts.push_back(Point(15655490, 5043780 )); pts.push_back(Point(15904620, 5292900 )); -pts.push_back(Point(15909200, 5293030 )); pts.push_back(Point(15935830, 5296006 )); pts.push_back(Point(15992796, 5319602 )); pts.push_back(Point(16036397, 5363203 )); pts.push_back(Point(16059993, 5420169 )); pts.push_back(Point(16059993, 5481830 )); pts.push_back(Point(16036397, 5538796 )); -pts.push_back(Point(15992796, 5582397 )); pts.push_back(Point(15935830, 5605993 )); pts.push_back(Point(15874169, 5605993 )); pts.push_back(Point(15817203, 5582397 )); pts.push_back(Point(15773602, 5538796 )); pts.push_back(Point(15750006, 5481830 )); pts.push_back(Point(15747030, 5455200 )); -pts.push_back(Point(15746900, 5450620 )); pts.push_back(Point(15563110, 5266820 )); pts.push_back(Point(14857380, 5266820 )); pts.push_back(Point(14857380, 5382430 )); pts.push_back(Point(14869993, 5420179 )); pts.push_back(Point(14869993, 5481840 )); pts.push_back(Point(14846397, 5538806 )); pts.push_back(Point(14802796, 5582407 )); -pts.push_back(Point(14745830, 5606003 )); pts.push_back(Point(14684169, 5606003 )); pts.push_back(Point(14627203, 5582407 )); pts.push_back(Point(14583602, 5538806 )); pts.push_back(Point(14560006, 5481840 )); pts.push_back(Point(14557030, 5455200 )); pts.push_back(Point(14556900, 5450620 )); pts.push_back(Point(14444750, 5338460 )); -pts.push_back(Point(13702890, 5338460 )); pts.push_back(Point(13702890, 5364400 )); pts.push_back(Point(13699993, 5401800 )); pts.push_back(Point(13676397, 5458766 )); pts.push_back(Point(13632796, 5502367 )); pts.push_back(Point(13575830, 5525963 )); pts.push_back(Point(13514169, 5525963 )); pts.push_back(Point(13457203, 5502367 )); -pts.push_back(Point(13413602, 5458766 )); pts.push_back(Point(13390006, 5401800 )); pts.push_back(Point(13389230, 5397620 )); pts.push_back(Point(13387590, 5388060 )); pts.push_back(Point(12532960, 5388060 )); pts.push_back(Point(12532960, 5446220 )); pts.push_back(Point(12529993, 5481820 )); -pts.push_back(Point(12506397, 5538786 )); pts.push_back(Point(12462796, 5582387 )); pts.push_back(Point(12405830, 5605983 )); pts.push_back(Point(12344169, 5605983 )); pts.push_back(Point(12287203, 5582387 )); pts.push_back(Point(12266270, 5565670 )); pts.push_back(Point(12262940, 5562520 )); pts.push_back(Point(11737750, 5562520 )); -pts.push_back(Point(11733272, 5562961 )); pts.push_back(Point(11724981, 5566396 )); pts.push_back(Point(11718636, 5572741 )); pts.push_back(Point(11715201, 5581032 )); pts.push_back(Point(11715201, 5590007 )); pts.push_back(Point(11718636, 5598298 )); pts.push_back(Point(11721500, 5601780 )); -pts.push_back(Point(12287760, 6168050 )); pts.push_back(Point(15689760, 6168050 )); pts.push_back(Point(15904620, 6382900 )); pts.push_back(Point(15909200, 6383030 )); pts.push_back(Point(15935830, 6386006 )); pts.push_back(Point(15992796, 6409602 )); -pts.push_back(Point(16036397, 6453203 )); pts.push_back(Point(16059993, 6510169 )); pts.push_back(Point(16059993, 6571830 )); pts.push_back(Point(16036397, 6628796 )); pts.push_back(Point(15992796, 6672397 )); pts.push_back(Point(15935830, 6695993 )); pts.push_back(Point(15874169, 6695993 )); -pts.push_back(Point(15817203, 6672397 )); pts.push_back(Point(15773602, 6628796 )); pts.push_back(Point(15750006, 6571830 )); pts.push_back(Point(15747030, 6545200 )); pts.push_back(Point(15746900, 6540620 )); pts.push_back(Point(15597380, 6391090 )); pts.push_back(Point(14858060, 6391090 )); -pts.push_back(Point(14858060, 6473860 )); pts.push_back(Point(14869993, 6510179 )); pts.push_back(Point(14869993, 6571840 )); pts.push_back(Point(14846397, 6628806 )); pts.push_back(Point(14802796, 6672407 )); pts.push_back(Point(14745830, 6696003 )); pts.push_back(Point(14684169, 6696003 )); -pts.push_back(Point(14627203, 6672407 )); pts.push_back(Point(14583602, 6628806 )); pts.push_back(Point(14560006, 6571840 )); pts.push_back(Point(14557030, 6545200 )); pts.push_back(Point(14556900, 6540620 )); pts.push_back(Point(14479020, 6462730 )); -pts.push_back(Point(13702990, 6462730 )); pts.push_back(Point(13702990, 6537170 )); pts.push_back(Point(13700003, 6571840 )); pts.push_back(Point(13676407, 6628806 )); pts.push_back(Point(13632806, 6672407 )); pts.push_back(Point(13575840, 6696003 )); -pts.push_back(Point(13514179, 6696003 )); pts.push_back(Point(13457213, 6672407 )); pts.push_back(Point(13413612, 6628806 )); pts.push_back(Point(13390016, 6571840 )); pts.push_back(Point(13387040, 6545550 )); pts.push_back(Point(13386710, 6534380 )); -pts.push_back(Point(12533290, 6534380 )); pts.push_back(Point(12532960, 6545550 )); pts.push_back(Point(12529983, 6571828 )); pts.push_back(Point(12506388, 6628791 )); pts.push_back(Point(12462791, 6672388 )); pts.push_back(Point(12405828, 6695983 )); +pts.push_back(Point(12262940, 6652520 )); pts.push_back(Point(12125750, 6652520 )); pts.push_back(Point(12121272, 6652961 )); pts.push_back(Point(12112981, 6656396 )); pts.push_back(Point(12106636, 6662741 )); pts.push_back(Point(12103201, 6671032 )); pts.push_back(Point(12103201, 6680007 )); pts.push_back(Point(12106636, 6688298 )); +pts.push_back(Point(12109500, 6691780 )); pts.push_back(Point(12748600, 7330890 )); pts.push_back(Point(15762600, 7330890 )); pts.push_back(Point(15904620, 7472900 )); pts.push_back(Point(15909200, 7473030 )); pts.push_back(Point(15935830, 7476006 )); pts.push_back(Point(15992796, 7499602 )); pts.push_back(Point(16036397, 7543203 )); +pts.push_back(Point(16059993, 7600169 )); pts.push_back(Point(16059993, 7661830 )); pts.push_back(Point(16036397, 7718796 )); pts.push_back(Point(15992796, 7762397 )); pts.push_back(Point(15935830, 7785993 )); pts.push_back(Point(15874169, 7785993 )); pts.push_back(Point(15817203, 7762397 )); pts.push_back(Point(15773602, 7718796 )); +pts.push_back(Point(15750006, 7661830 )); pts.push_back(Point(15747030, 7635200 )); pts.push_back(Point(15746900, 7630620 )); pts.push_back(Point(15670220, 7553930 )); pts.push_back(Point(14872950, 7553930 )); pts.push_back(Point(14872950, 7626170 )); +pts.push_back(Point(14869973, 7661280 )); pts.push_back(Point(14846377, 7718246 )); pts.push_back(Point(14802776, 7761847 )); pts.push_back(Point(14745810, 7785443 )); pts.push_back(Point(14684149, 7785443 )); pts.push_back(Point(14627183, 7761847 )); pts.push_back(Point(14583582, 7718246 )); +pts.push_back(Point(14559986, 7661280 )); pts.push_back(Point(14557070, 7636660 )); pts.push_back(Point(14556670, 7625570 )); pts.push_back(Point(13703330, 7625570 )); pts.push_back(Point(13702930, 7636660 )); pts.push_back(Point(13699993, 7661830 )); pts.push_back(Point(13676397, 7718796 )); +pts.push_back(Point(13632796, 7762397 )); pts.push_back(Point(13575830, 7785993 )); pts.push_back(Point(13514169, 7785993 )); pts.push_back(Point(13457203, 7762397 )); pts.push_back(Point(13436270, 7745670 )); pts.push_back(Point(13432940, 7742520 )); pts.push_back(Point(12963760, 7742520 )); +pts.push_back(Point(12959272, 7742961 )); pts.push_back(Point(12950981, 7746396 )); pts.push_back(Point(12944636, 7752741 )); pts.push_back(Point(12941201, 7761032 )); pts.push_back(Point(12941201, 7770007 )); pts.push_back(Point(12944636, 7778298 )); pts.push_back(Point(12947490, 7781780 )); +pts.push_back(Point(13425330, 8259620 )); pts.push_back(Point(15601330, 8259620 )); pts.push_back(Point(15904620, 8562900 )); pts.push_back(Point(15909200, 8563030 )); pts.push_back(Point(15935830, 8566006 )); pts.push_back(Point(15992796, 8589602 )); pts.push_back(Point(16036397, 8633203 )); +pts.push_back(Point(16059993, 8690169 )); pts.push_back(Point(16059993, 8751830 )); pts.push_back(Point(16036397, 8808796 )); pts.push_back(Point(15992796, 8852397 )); pts.push_back(Point(15935830, 8875993 )); pts.push_back(Point(15874169, 8875993 )); pts.push_back(Point(15817203, 8852397 )); pts.push_back(Point(15773602, 8808796 )); +pts.push_back(Point(15750006, 8751830 )); pts.push_back(Point(15747030, 8725200 )); pts.push_back(Point(15746900, 8720620 )); pts.push_back(Point(15508950, 8482660 )); pts.push_back(Point(14689890, 8482660 )); pts.push_back(Point(14685412, 8483101 )); pts.push_back(Point(14677121, 8486536 )); +pts.push_back(Point(14670776, 8492881 )); pts.push_back(Point(14667341, 8501172 )); pts.push_back(Point(14667341, 8510147 )); pts.push_back(Point(14670776, 8518438 )); pts.push_back(Point(14673630, 8521920 )); pts.push_back(Point(14714620, 8562900 )); pts.push_back(Point(14719200, 8563030 )); pts.push_back(Point(14745830, 8566006 )); +pts.push_back(Point(14802796, 8589602 )); pts.push_back(Point(14846397, 8633203 )); pts.push_back(Point(14869993, 8690169 )); pts.push_back(Point(14869993, 8751830 )); pts.push_back(Point(14846397, 8808796 )); pts.push_back(Point(14802796, 8852397 )); pts.push_back(Point(14745830, 8875993 )); pts.push_back(Point(14684169, 8875993 )); +pts.push_back(Point(14627203, 8852397 )); pts.push_back(Point(14583602, 8808796 )); pts.push_back(Point(14560006, 8751830 )); pts.push_back(Point(14557030, 8725200 )); pts.push_back(Point(14556900, 8720620 )); pts.push_back(Point(14408270, 8571980 )); pts.push_back(Point(13696320, 8571980 )); pts.push_back(Point(13696320, 8675520 )); +pts.push_back(Point(13699963, 8690161 )); pts.push_back(Point(13699963, 8751818 )); pts.push_back(Point(13676368, 8808781 )); pts.push_back(Point(13632771, 8852378 )); pts.push_back(Point(13575808, 8875973 )); pts.push_back(Point(13514151, 8875973 )); pts.push_back(Point(13457188, 8852378 )); pts.push_back(Point(13436270, 8835670 )); pts.push_back(Point(13432940, 8832520 )); +pts.push_back(Point(13281760, 8832520 )); pts.push_back(Point(13277272, 8832961 )); pts.push_back(Point(13268981, 8836396 )); pts.push_back(Point(13262636, 8842741 )); pts.push_back(Point(13259201, 8851032 )); pts.push_back(Point(13259201, 8860007 )); pts.push_back(Point(13262636, 8868298 )); pts.push_back(Point(13265500, 8871780 )); +pts.push_back(Point(13518710, 9125000 )); pts.push_back(Point(16270720, 9125000 )); pts.push_back(Point(16270720, 8939590 )); pts.push_back(Point(17120780, 8939590 )); pts.push_back(Point(17120780, 9125000 )); pts.push_back(Point(17616200, 9125000 )); pts.push_back(Point(17616200, 75000 )); pts.push_back(Point(16024790, 75000 )); +pts.push_back(Point(16021460, 80700 )); pts.push_back(Point(16016397, 88796 )); pts.push_back(Point(15972796, 132397 )); pts.push_back(Point(15915830, 155993 )); pts.push_back(Point(15908730, 157240 )); pts.push_back(Point(15905000, 157800 )); pts.push_back(Point(15516800, 546000 )); pts.push_back(Point(15905000, 934200 )); +pts.push_back(Point(15908730, 934760 )); pts.push_back(Point(15915830, 936006 )); pts.push_back(Point(15972796, 959602 )); pts.push_back(Point(16016397, 1003203 )); pts.push_back(Point(16039993, 1060169 )); pts.push_back(Point(16039993, 1121830 )); pts.push_back(Point(16016397, 1178796 )); pts.push_back(Point(15972796, 1222397 )); +pts.push_back(Point(15915830, 1245993 )); pts.push_back(Point(15854169, 1245993 )); pts.push_back(Point(15797203, 1222397 )); pts.push_back(Point(15753602, 1178796 )); pts.push_back(Point(15730006, 1121830 )); pts.push_back(Point(15728760, 1114730 )); pts.push_back(Point(15728200, 1111000 )); pts.push_back(Point(15363500, 746300 )); +pts.push_back(Point(14602620, 746300 )); pts.push_back(Point(14598142, 746741 )); pts.push_back(Point(14589851, 750176 )); pts.push_back(Point(14583506, 756521 )); pts.push_back(Point(14580071, 764812 )); pts.push_back(Point(14580071, 773787 )); pts.push_back(Point(14583506, 782078 )); pts.push_back(Point(14586360, 785560 )); +pts.push_back(Point(14586370, 785560 )); pts.push_back(Point(14735000, 934200 )); pts.push_back(Point(14738730, 934760 )); pts.push_back(Point(14745830, 936006 )); pts.push_back(Point(14802796, 959602 )); pts.push_back(Point(14846397, 1003203 )); pts.push_back(Point(14869993, 1060169 )); +pts.push_back(Point(14870450, 1062550 )); pts.push_back(Point(14872170, 1071980 )); pts.push_back(Point(14972780, 1071980 )); pts.push_back(Point(15925000, 2024200 )); pts.push_back(Point(15928730, 2024760 )); pts.push_back(Point(15935830, 2026006 )); pts.push_back(Point(15992796, 2049602 )); +pts.push_back(Point(16036397, 2093203 )); pts.push_back(Point(16059993, 2150169 )); pts.push_back(Point(16059993, 2211830 )); pts.push_back(Point(16036397, 2268796 )); pts.push_back(Point(15992796, 2312397 )); pts.push_back(Point(15935830, 2335993 )); pts.push_back(Point(15874169, 2335993 )); +pts.push_back(Point(15817203, 2312397 )); pts.push_back(Point(15773602, 2268796 )); pts.push_back(Point(15750006, 2211830 )); pts.push_back(Point(15748760, 2204730 )); pts.push_back(Point(15748200, 2201000 )); pts.push_back(Point(14869220, 1322020 )); pts.push_back(Point(14088350, 1322020 )); +pts.push_back(Point(14083862, 1322461 )); pts.push_back(Point(14075571, 1325896 )); pts.push_back(Point(14069226, 1332241 )); pts.push_back(Point(14065791, 1340532 )); pts.push_back(Point(14065791, 1349507 )); pts.push_back(Point(14069226, 1357798 )); pts.push_back(Point(14072080, 1361280 )); +pts.push_back(Point(14072090, 1361280 )); pts.push_back(Point(14735000, 2024200 )); pts.push_back(Point(14738730, 2024760 )); pts.push_back(Point(14745830, 2026006 )); pts.push_back(Point(14802796, 2049602 )); pts.push_back(Point(14846397, 2093203 )); pts.push_back(Point(14869993, 2150169 )); +pts.push_back(Point(14869993, 2211830 )); pts.push_back(Point(14846397, 2268796 )); pts.push_back(Point(14802796, 2312397 )); pts.push_back(Point(14745830, 2335993 )); pts.push_back(Point(14684169, 2335993 )); pts.push_back(Point(14627203, 2312397 )); pts.push_back(Point(14583602, 2268796 )); pts.push_back(Point(14560006, 2211830 )); +pts.push_back(Point(14558760, 2204730 )); pts.push_back(Point(14558200, 2201000 )); pts.push_back(Point(13752220, 1395020 )); pts.push_back(Point(12991340, 1395020 )); pts.push_back(Point(12986862, 1395461 )); pts.push_back(Point(12978571, 1398896 )); pts.push_back(Point(12972226, 1405241 )); +pts.push_back(Point(12968791, 1413532 )); pts.push_back(Point(12968791, 1422507 )); pts.push_back(Point(12972226, 1430798 )); pts.push_back(Point(12975080, 1434280 )); pts.push_back(Point(12975090, 1434280 )); pts.push_back(Point(13565000, 2024200 )); pts.push_back(Point(13568730, 2024760 )); pts.push_back(Point(13575830, 2026006 )); +pts.push_back(Point(13632796, 2049602 )); pts.push_back(Point(13676397, 2093203 )); pts.push_back(Point(13699993, 2150169 )); pts.push_back(Point(13699993, 2211830 )); pts.push_back(Point(13676397, 2268796 )); pts.push_back(Point(13632796, 2312397 )); pts.push_back(Point(13575830, 2335993 )); +pts.push_back(Point(13514169, 2335993 )); pts.push_back(Point(13457203, 2312397 )); pts.push_back(Point(13413602, 2268796 )); pts.push_back(Point(13390006, 2211830 )); pts.push_back(Point(13388760, 2204730 )); pts.push_back(Point(13388200, 2201000 )); pts.push_back(Point(12655220, 1468020 )); +pts.push_back(Point(11894340, 1468020 )); pts.push_back(Point(11889862, 1468461 )); pts.push_back(Point(11881571, 1471896 )); pts.push_back(Point(11875226, 1478241 )); pts.push_back(Point(11871791, 1486532 )); pts.push_back(Point(11871791, 1495507 )); +pts.push_back(Point(11875226, 1503798 )); pts.push_back(Point(11878090, 1507280 )); pts.push_back(Point(12395000, 2024200 )); pts.push_back(Point(12398730, 2024760 )); pts.push_back(Point(12405830, 2026006 )); pts.push_back(Point(12462796, 2049602 )); pts.push_back(Point(12506397, 2093203 )); +pts.push_back(Point(12529993, 2150169 )); pts.push_back(Point(12529993, 2211830 )); pts.push_back(Point(12506397, 2268796 )); pts.push_back(Point(12462796, 2312397 )); pts.push_back(Point(12405830, 2335993 )); pts.push_back(Point(12344169, 2335993 )); +pts.push_back(Point(12287203, 2312397 )); pts.push_back(Point(12243602, 2268796 )); pts.push_back(Point(12220006, 2211830 )); pts.push_back(Point(12218760, 2204730 )); pts.push_back(Point(12218200, 2201000 )); pts.push_back(Point(11558220, 1541020 )); +pts.push_back(Point(10797340, 1541020 )); pts.push_back(Point(10792862, 1541461 )); pts.push_back(Point(10784571, 1544896 )); pts.push_back(Point(10778226, 1551241 )); pts.push_back(Point(10774791, 1559532 )); pts.push_back(Point(10774791, 1568507 )); pts.push_back(Point(10778226, 1576798 )); pts.push_back(Point(10781080, 1580280 )); +pts.push_back(Point(10781090, 1580280 )); pts.push_back(Point(11225000, 2024200 )); pts.push_back(Point(11228730, 2024760 )); pts.push_back(Point(11235830, 2026006 )); pts.push_back(Point(11292796, 2049602 )); pts.push_back(Point(11336397, 2093203 )); pts.push_back(Point(11359993, 2150169 )); +pts.push_back(Point(11359993, 2211830 )); pts.push_back(Point(11336397, 2268796 )); pts.push_back(Point(11292796, 2312397 )); pts.push_back(Point(11235830, 2335993 )); pts.push_back(Point(11174169, 2335993 )); pts.push_back(Point(11117203, 2312397 )); pts.push_back(Point(11073602, 2268796 )); pts.push_back(Point(11050006, 2211830 )); +pts.push_back(Point(11048760, 2204730 )); pts.push_back(Point(11048200, 2201000 )); pts.push_back(Point(10461220, 1614020 )); pts.push_back(Point( 5647400, 1614020 )); pts.push_back(Point( 5642912, 1614461 )); +pts.push_back(Point( 5634621, 1617896 )); pts.push_back(Point( 5628276, 1624241 )); pts.push_back(Point( 5624841, 1632532 )); pts.push_back(Point( 5624841, 1641507 )); pts.push_back(Point( 5628276, 1649798 )); pts.push_back(Point( 5631130, 1653280 )); +pts.push_back(Point( 5688490, 1710640 )); pts.push_back(Point( 9722350, 1710640 )); pts.push_back(Point(10034620, 2022900 )); pts.push_back(Point(10039200, 2023030 )); pts.push_back(Point(10065830, 2026006 )); pts.push_back(Point(10122796, 2049602 )); +pts.push_back(Point(10166397, 2093203 )); pts.push_back(Point(10189993, 2150169 )); pts.push_back(Point(10189993, 2211830 )); pts.push_back(Point(10166397, 2268796 )); pts.push_back(Point(10158620, 2279450 )); pts.push_back(Point(10158620, 2404900 )); pts.push_back(Point(10548950, 2795240 )); +pts.push_back(Point(15586950, 2795240 )); pts.push_back(Point(15904620, 3112900 )); pts.push_back(Point(15909200, 3113030 )); pts.push_back(Point(15935830, 3116006 )); pts.push_back(Point(15992796, 3139602 )); pts.push_back(Point(16036397, 3183203 )); pts.push_back(Point(16059993, 3240169 )); pts.push_back(Point(16059993, 3301830 )); +pts.push_back(Point(16036397, 3358796 )); pts.push_back(Point(15992796, 3402397 )); pts.push_back(Point(15935830, 3425993 )); pts.push_back(Point(15874169, 3425993 )); pts.push_back(Point(15817203, 3402397 )); pts.push_back(Point(15773602, 3358796 )); pts.push_back(Point(15750006, 3301830 )); pts.push_back(Point(15747030, 3275200 )); +pts.push_back(Point(15746900, 3270620 )); pts.push_back(Point(15494570, 3018280 )); pts.push_back(Point(14675510, 3018280 )); pts.push_back(Point(14671032, 3018721 )); pts.push_back(Point(14662741, 3022156 )); pts.push_back(Point(14656396, 3028501 )); pts.push_back(Point(14652961, 3036792 )); +pts.push_back(Point(14652961, 3045767 )); pts.push_back(Point(14656396, 3054058 )); pts.push_back(Point(14659260, 3057540 )); pts.push_back(Point(14714620, 3112900 )); pts.push_back(Point(14719200, 3113030 )); pts.push_back(Point(14745830, 3116006 )); pts.push_back(Point(14802796, 3139602 )); +pts.push_back(Point(14846397, 3183203 )); pts.push_back(Point(14869993, 3240169 )); pts.push_back(Point(14869993, 3301830 )); pts.push_back(Point(14846397, 3358796 )); pts.push_back(Point(14802796, 3402397 )); pts.push_back(Point(14745830, 3425993 )); pts.push_back(Point(14684169, 3425993 )); pts.push_back(Point(14627203, 3402397 )); +pts.push_back(Point(14583602, 3358796 )); pts.push_back(Point(14560006, 3301830 )); pts.push_back(Point(14557030, 3275200 )); pts.push_back(Point(14556900, 3270620 )); pts.push_back(Point(14370700, 3084410 )); pts.push_back(Point(13702830, 3084410 )); pts.push_back(Point(13702830, 3263160 )); +pts.push_back(Point(13700003, 3302210 )); pts.push_back(Point(13676407, 3359176 )); pts.push_back(Point(13632806, 3402777 )); pts.push_back(Point(13575840, 3426373 )); pts.push_back(Point(13514179, 3426373 )); pts.push_back(Point(13457213, 3402777 )); pts.push_back(Point(13413612, 3359176 )); +pts.push_back(Point(13390016, 3302210 )); pts.push_back(Point(13387030, 3275200 )); pts.push_back(Point(13386900, 3270620 )); pts.push_back(Point(13266840, 3150550 )); pts.push_back(Point(12532920, 3150550 )); pts.push_back(Point(12532920, 3264990 )); pts.push_back(Point(12529993, 3301820 )); +pts.push_back(Point(12506397, 3358786 )); pts.push_back(Point(12462796, 3402387 )); pts.push_back(Point(12405830, 3425983 )); pts.push_back(Point(12344169, 3425983 )); pts.push_back(Point(12287203, 3402387 )); pts.push_back(Point(12243602, 3358786 )); pts.push_back(Point(12220006, 3301820 )); pts.push_back(Point(12217030, 3275200 )); +pts.push_back(Point(12216900, 3270620 )); pts.push_back(Point(12157460, 3211170 )); pts.push_back(Point(11362030, 3211170 )); pts.push_back(Point(11360250, 3220520 )); pts.push_back(Point(11359993, 3221830 )); pts.push_back(Point(11336397, 3278796 )); +pts.push_back(Point(11292796, 3322397 )); pts.push_back(Point(11235830, 3345993 )); pts.push_back(Point(11174169, 3345993 )); pts.push_back(Point(11117203, 3322397 )); pts.push_back(Point(11096270, 3305670 )); pts.push_back(Point(11092940, 3302520 )); pts.push_back(Point(10680760, 3302520 )); +pts.push_back(Point(10676272, 3302961 )); pts.push_back(Point(10667981, 3306396 )); pts.push_back(Point(10661636, 3312741 )); pts.push_back(Point(10658201, 3321032 )); pts.push_back(Point(10658201, 3330007 )); pts.push_back(Point(10661636, 3338298 )); pts.push_back(Point(10664500, 3341780 )); +pts.push_back(Point(11264260, 3941550 )); pts.push_back(Point(15643260, 3941550 )); pts.push_back(Point(15904620, 4202900 )); pts.push_back(Point(15909200, 4203030 )); pts.push_back(Point(15935830, 4206006 )); pts.push_back(Point(15992796, 4229602 )); +pts.push_back(Point(16036397, 4273203 )); pts.push_back(Point(16059993, 4330169 )); pts.push_back(Point(16059993, 4391830 )); pts.push_back(Point(16036397, 4448796 )); pts.push_back(Point(15992796, 4492397 )); +pts.push_back(Point(15935830, 4515993 )); pts.push_back(Point(15874169, 4515993 )); pts.push_back(Point(15817203, 4492397 )); pts.push_back(Point(15773602, 4448796 )); pts.push_back(Point(15750006, 4391830 )); pts.push_back(Point(15747030, 4365200 )); pts.push_back(Point(15746900, 4360620 )); +pts.push_back(Point(15550880, 4164590 )); pts.push_back(Point(14825070, 4164590 )); pts.push_back(Point(14825070, 4247610 )); pts.push_back(Point(14846397, 4273213 )); pts.push_back(Point(14869993, 4330179 )); pts.push_back(Point(14869993, 4391840 )); pts.push_back(Point(14846397, 4448806 )); +pts.push_back(Point(14802796, 4492407 )); pts.push_back(Point(14745830, 4516003 )); pts.push_back(Point(14684169, 4516003 )); pts.push_back(Point(14627203, 4492407 )); pts.push_back(Point(14583602, 4448806 )); pts.push_back(Point(14560006, 4391840 )); pts.push_back(Point(14557030, 4365200 )); +pts.push_back(Point(14556900, 4360620 )); pts.push_back(Point(14432520, 4236230 )); pts.push_back(Point(13702830, 4236230 )); pts.push_back(Point(13702830, 4352930 )); pts.push_back(Point(13699993, 4391750 )); pts.push_back(Point(13676397, 4448716 )); +pts.push_back(Point(13632796, 4492317 )); pts.push_back(Point(13575830, 4515913 )); pts.push_back(Point(13514169, 4515913 )); pts.push_back(Point(13457203, 4492317 )); pts.push_back(Point(13413602, 4448716 )); pts.push_back(Point(13390006, 4391750 )); pts.push_back(Point(13387030, 4365200 )); +pts.push_back(Point(13386900, 4360620 )); pts.push_back(Point(13334170, 4307880 )); pts.push_back(Point(12532990, 4307880 )); pts.push_back(Point(12532990, 4357550 )); pts.push_back(Point(12529993, 4391760 )); pts.push_back(Point(12506397, 4448726 )); pts.push_back(Point(12462796, 4492327 )); +pts.push_back(Point(12405830, 4515923 )); pts.push_back(Point(12344169, 4515923 )); pts.push_back(Point(12287203, 4492327 )); pts.push_back(Point(12243602, 4448726 )); pts.push_back(Point(12220006, 4391760 )); pts.push_back(Point(12217970, 4378710 )); pts.push_back(Point(12216810, 4368500 )); +pts.push_back(Point(11363190, 4368500 )); pts.push_back(Point(11362030, 4378710 )); pts.push_back(Point(11359983, 4391828 )); pts.push_back(Point(11336388, 4448791 )); pts.push_back(Point(11292791, 4492388 )); pts.push_back(Point(11235828, 4515983 )); pts.push_back(Point(11174171, 4515983 )); pts.push_back(Point(11117208, 4492388 )); +pts.push_back(Point(11096270, 4475670 )); pts.push_back(Point(11092940, 4472520 )); pts.push_back(Point(11057750, 4472520 )); pts.push_back(Point(11053272, 4472961 )); pts.push_back(Point(11044981, 4476396 )); pts.push_back(Point(11038636, 4482741 )); pts.push_back(Point(11035201, 4491032 )); +pts.push_back(Point(11035201, 4500007 )); pts.push_back(Point(11038636, 4508298 )); pts.push_back(Point(11041490, 4511780 )); pts.push_back(Point(11573490, 5043780 )); pts.push_back(Point(15655490, 5043780 )); pts.push_back(Point(15904620, 5292900 )); +pts.push_back(Point(15909200, 5293030 )); pts.push_back(Point(15935830, 5296006 )); pts.push_back(Point(15992796, 5319602 )); pts.push_back(Point(16036397, 5363203 )); pts.push_back(Point(16059993, 5420169 )); pts.push_back(Point(16059993, 5481830 )); pts.push_back(Point(16036397, 5538796 )); +pts.push_back(Point(15992796, 5582397 )); pts.push_back(Point(15935830, 5605993 )); pts.push_back(Point(15874169, 5605993 )); pts.push_back(Point(15817203, 5582397 )); pts.push_back(Point(15773602, 5538796 )); pts.push_back(Point(15750006, 5481830 )); pts.push_back(Point(15747030, 5455200 )); +pts.push_back(Point(15746900, 5450620 )); pts.push_back(Point(15563110, 5266820 )); pts.push_back(Point(14857380, 5266820 )); pts.push_back(Point(14857380, 5382430 )); pts.push_back(Point(14869993, 5420179 )); pts.push_back(Point(14869993, 5481840 )); pts.push_back(Point(14846397, 5538806 )); pts.push_back(Point(14802796, 5582407 )); +pts.push_back(Point(14745830, 5606003 )); pts.push_back(Point(14684169, 5606003 )); pts.push_back(Point(14627203, 5582407 )); pts.push_back(Point(14583602, 5538806 )); pts.push_back(Point(14560006, 5481840 )); pts.push_back(Point(14557030, 5455200 )); pts.push_back(Point(14556900, 5450620 )); pts.push_back(Point(14444750, 5338460 )); +pts.push_back(Point(13702890, 5338460 )); pts.push_back(Point(13702890, 5364400 )); pts.push_back(Point(13699993, 5401800 )); pts.push_back(Point(13676397, 5458766 )); pts.push_back(Point(13632796, 5502367 )); pts.push_back(Point(13575830, 5525963 )); pts.push_back(Point(13514169, 5525963 )); pts.push_back(Point(13457203, 5502367 )); +pts.push_back(Point(13413602, 5458766 )); pts.push_back(Point(13390006, 5401800 )); pts.push_back(Point(13389230, 5397620 )); pts.push_back(Point(13387590, 5388060 )); pts.push_back(Point(12532960, 5388060 )); pts.push_back(Point(12532960, 5446220 )); pts.push_back(Point(12529993, 5481820 )); +pts.push_back(Point(12506397, 5538786 )); pts.push_back(Point(12462796, 5582387 )); pts.push_back(Point(12405830, 5605983 )); pts.push_back(Point(12344169, 5605983 )); pts.push_back(Point(12287203, 5582387 )); pts.push_back(Point(12266270, 5565670 )); pts.push_back(Point(12262940, 5562520 )); pts.push_back(Point(11737750, 5562520 )); +pts.push_back(Point(11733272, 5562961 )); pts.push_back(Point(11724981, 5566396 )); pts.push_back(Point(11718636, 5572741 )); pts.push_back(Point(11715201, 5581032 )); pts.push_back(Point(11715201, 5590007 )); pts.push_back(Point(11718636, 5598298 )); pts.push_back(Point(11721500, 5601780 )); +pts.push_back(Point(12287760, 6168050 )); pts.push_back(Point(15689760, 6168050 )); pts.push_back(Point(15904620, 6382900 )); pts.push_back(Point(15909200, 6383030 )); pts.push_back(Point(15935830, 6386006 )); pts.push_back(Point(15992796, 6409602 )); +pts.push_back(Point(16036397, 6453203 )); pts.push_back(Point(16059993, 6510169 )); pts.push_back(Point(16059993, 6571830 )); pts.push_back(Point(16036397, 6628796 )); pts.push_back(Point(15992796, 6672397 )); pts.push_back(Point(15935830, 6695993 )); pts.push_back(Point(15874169, 6695993 )); +pts.push_back(Point(15817203, 6672397 )); pts.push_back(Point(15773602, 6628796 )); pts.push_back(Point(15750006, 6571830 )); pts.push_back(Point(15747030, 6545200 )); pts.push_back(Point(15746900, 6540620 )); pts.push_back(Point(15597380, 6391090 )); pts.push_back(Point(14858060, 6391090 )); +pts.push_back(Point(14858060, 6473860 )); pts.push_back(Point(14869993, 6510179 )); pts.push_back(Point(14869993, 6571840 )); pts.push_back(Point(14846397, 6628806 )); pts.push_back(Point(14802796, 6672407 )); pts.push_back(Point(14745830, 6696003 )); pts.push_back(Point(14684169, 6696003 )); +pts.push_back(Point(14627203, 6672407 )); pts.push_back(Point(14583602, 6628806 )); pts.push_back(Point(14560006, 6571840 )); pts.push_back(Point(14557030, 6545200 )); pts.push_back(Point(14556900, 6540620 )); pts.push_back(Point(14479020, 6462730 )); +pts.push_back(Point(13702990, 6462730 )); pts.push_back(Point(13702990, 6537170 )); pts.push_back(Point(13700003, 6571840 )); pts.push_back(Point(13676407, 6628806 )); pts.push_back(Point(13632806, 6672407 )); pts.push_back(Point(13575840, 6696003 )); +pts.push_back(Point(13514179, 6696003 )); pts.push_back(Point(13457213, 6672407 )); pts.push_back(Point(13413612, 6628806 )); pts.push_back(Point(13390016, 6571840 )); pts.push_back(Point(13387040, 6545550 )); pts.push_back(Point(13386710, 6534380 )); +pts.push_back(Point(12533290, 6534380 )); pts.push_back(Point(12532960, 6545550 )); pts.push_back(Point(12529983, 6571828 )); pts.push_back(Point(12506388, 6628791 )); pts.push_back(Point(12462791, 6672388 )); pts.push_back(Point(12405828, 6695983 )); pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 )); pts.push_back(Point(12266270, 6655670 )); poly.set(pts.begin(), pts.end()); si.insert(poly, 444); @@ -2168,7 +2168,7 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 outpts.push_back((*itr).first.first); outpts.push_back((*itr).first.second); } - gtlsort(outpts.begin(), outpts.end()); + polygon_sort(outpts.begin(), outpts.end()); for(std::size_t i = 0; i < outpts.size(); i+=2) { if(outpts[i] != outpts[i+1]) { stdcout << "Polygon set not a closed figure\n"; @@ -2486,10 +2486,10 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 template class arbitrary_boolean_op : public scanline_base { private: - + typedef int property_type; typedef typename scanline_base::Point Point; - + //the first point is the vertex and and second point establishes the slope of an edge eminating from the vertex //typedef std::pair half_edge; typedef typename scanline_base::half_edge half_edge; @@ -2567,7 +2567,7 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 if((*(left.begin())) == 0) { result.insert_clean(elem); } - } + } #ifdef BOOST_POLYGON_MSVC #pragma warning (default: 4127) #endif @@ -2583,7 +2583,7 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 inline void sort_property_merge_data() { less_vertex_data lvd(&evalAtXforYPack_); - gtlsort(pmd.begin(), pmd.end(), lvd); + polygon_sort(pmd.begin(), pmd.end(), lvd); } public: inline arbitrary_boolean_op() : pmd(), evalAtXforYPack_() {} @@ -2593,7 +2593,7 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 enum BOOLEAN_OP_TYPE { BOOLEAN_OR = 0, BOOLEAN_AND = 1, - BOOLEAN_XOR = 2, + BOOLEAN_XOR = 2, BOOLEAN_NOT = 3 }; template @@ -2627,17 +2627,17 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 } else if(op == BOOLEAN_NOT) { boolean_output_functor, 3> bof; sl.scan(result, bof, pmd.begin(), pmd.end()); - } + } } - + inline void clear() {*this = arbitrary_boolean_op();} private: template void insert(iT b, iT e, int id) { - for(; + for(; b != e; ++b) { - pmd.push_back(vertex_property(half_edge((*b).first.first, (*b).first.second), + pmd.push_back(vertex_property(half_edge((*b).first.first, (*b).first.second), std::pair(id, (*b).second))); } } @@ -2705,9 +2705,9 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 template class arbitrary_connectivity_extraction : public scanline_base { private: - + typedef typename scanline_base::Point Point; - + //the first point is the vertex and and second point establishes the slope of an edge eminating from the vertex //typedef std::pair half_edge; typedef typename scanline_base::half_edge half_edge; @@ -2752,7 +2752,7 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 std::map, std::set >& y_prop_map = output.first.second; if(y_prop_map.empty()) return; Unit x = output.first.first; - for(typename std::map, std::set >::iterator itr = + for(typename std::map, std::set >::iterator itr = y_prop_map.begin(); itr != y_prop_map.end(); ++itr) { if((*itr).first.x() < x) { y_prop_map.erase(y_prop_map.begin(), itr); @@ -2771,7 +2771,7 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 } } } - + template class connectivity_extraction_output_functor { public: @@ -2784,21 +2784,21 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 x = pt.x(); std::set& output_set = y_prop_map[pt]; { - for(typename key_type::const_iterator itr1 = + for(typename key_type::const_iterator itr1 = left.begin(); itr1 != left.end(); ++itr1) { output_set.insert(output_set.end(), *itr1); } - for(typename key_type::const_iterator itr2 = + for(typename key_type::const_iterator itr2 = right.begin(); itr2 != right.end(); ++itr2) { output_set.insert(output_set.end(), *itr2); } } std::set& output_set2 = y_prop_map[edge.second]; - for(typename key_type::const_iterator itr1 = + for(typename key_type::const_iterator itr1 = left.begin(); itr1 != left.end(); ++itr1) { output_set2.insert(output_set2.end(), *itr1); } - for(typename key_type::const_iterator itr2 = + for(typename key_type::const_iterator itr2 = right.begin(); itr2 != right.end(); ++itr2) { output_set2.insert(output_set2.end(), *itr2); } @@ -2807,7 +2807,7 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 inline void sort_property_merge_data() { less_vertex_data lvd(&evalAtXforYPack_); - gtlsort(pmd.begin(), pmd.end(), lvd); + polygon_sort(pmd.begin(), pmd.end(), lvd); } public: inline arbitrary_connectivity_extraction() : pmd(), evalAtXforYPack_() {} @@ -2824,13 +2824,13 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 pmd.swap(tmp_pmd); sort_property_merge_data(); scanline > sl; - std::pair, std::set > >, + std::pair, std::set > >, result_type*> output - (std::make_pair(std::make_pair((std::numeric_limits::max)(), - std::map, + (std::make_pair(std::make_pair((std::numeric_limits::max)(), + std::map, std::set >()), &result)); - connectivity_extraction_output_functor, std::set > >, result_type*>, + connectivity_extraction_output_functor, std::set > >, result_type*>, std::vector > ceof; sl.scan(output, ceof, pmd.begin(), pmd.end()); process_previous_x(output); @@ -2839,17 +2839,16 @@ pts.push_back(Point(12344171, 6695983 )); pts.push_back(Point(12287208, 6672388 inline void clear() {*this = arbitrary_connectivity_extraction();} template - void populateTouchSetData(iT begin, iT end, + void populateTouchSetData(iT begin, iT end, property_type property) { for( ; begin != end; ++begin) { - pmd.push_back(vertex_property(half_edge((*begin).first.first, (*begin).first.second), + pmd.push_back(vertex_property(half_edge((*begin).first.first, (*begin).first.second), std::pair(property, (*begin).second))); } } }; -} +} } #endif - diff --git a/3party/boost/boost/polygon/detail/transform_detail.hpp b/3party/boost/boost/polygon/detail/transform_detail.hpp index 2cd3400459..daba2310e4 100644 --- a/3party/boost/boost/polygon/detail/transform_detail.hpp +++ b/3party/boost/boost/polygon/detail/transform_detail.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -54,7 +54,7 @@ namespace boost { namespace polygon{ }; atr_ = tmp[orient.to_int()]; } - + inline axis_transformation::axis_transformation(const orientation_2d& orient) : atr_(NULL_TRANSFORM) { const ATR tmp[3] = { NORTH_EAST_UP, //sort by z, then x, then y @@ -62,7 +62,7 @@ namespace boost { namespace polygon{ }; atr_ = tmp[orient.to_int()]; } - + inline axis_transformation::axis_transformation(const direction_3d& dir) : atr_(NULL_TRANSFORM) { const ATR tmp[6] = { DOWN_EAST_NORTH, //sort by -x, then z, then y @@ -74,7 +74,7 @@ namespace boost { namespace polygon{ }; atr_ = tmp[dir.to_int()]; } - + inline axis_transformation::axis_transformation(const direction_2d& dir) : atr_(NULL_TRANSFORM) { const ATR tmp[4] = { SOUTH_EAST_UP, //sort by z, then x, then y @@ -84,7 +84,7 @@ namespace boost { namespace polygon{ }; atr_ = tmp[dir.to_int()]; } - + inline axis_transformation& axis_transformation::operator=(const axis_transformation& a) { atr_ = a.atr_; return *this; @@ -113,13 +113,13 @@ namespace boost { namespace polygon{ bool abit3 = (a.atr_ & 8) != 0; bool abit2 = (a.atr_ & 4) != 0; bool abit1 = (a.atr_ & 2) != 0; - bool abit0 = (a.atr_ & 1) != 0; + bool abit0 = (a.atr_ & 1) != 0; bool bit5 = (atr_ & 32) != 0; bool bit4 = (atr_ & 16) != 0; bool bit3 = (atr_ & 8) != 0; bool bit2 = (atr_ & 4) != 0; bool bit1 = (atr_ & 2) != 0; - bool bit0 = (atr_ & 1) != 0; + bool bit0 = (atr_ & 1) != 0; int indexes[2][3] = { { ((int)((bit5 & bit2) | (bit4 & !bit2)) << 1) + @@ -127,7 +127,7 @@ namespace boost { namespace polygon{ ((int)((bit4 & bit2) | (bit5 & !bit2)) << 1) + (int)(!bit5 & !bit2), ((int)(!bit4 & !bit5) << 1) + - (int)(bit5) + (int)(bit5) }, { ((int)((abit5 & abit2) | (abit4 & !abit2)) << 1) + @@ -135,7 +135,7 @@ namespace boost { namespace polygon{ ((int)((abit4 & abit2) | (abit5 & !abit2)) << 1) + (int)(!abit5 & !abit2), ((int)(!abit4 & !abit5) << 1) + - (int)(abit5) + (int)(abit5) } }; int zero_bits[2][3] = { @@ -153,19 +153,19 @@ namespace boost { namespace polygon{ int nbit2 = (!(nbit5 | nbit4) & (bool)(indexes[0][0] & 1)) | //swap xy (nbit5 & ((indexes[0][0] & 2) >> 1)) | //z->y x->z (nbit4 & ((indexes[0][1] & 2) >> 1)); //z->x y->z - atr_ = (ATR)((nbit5 << 5) + - (nbit4 << 4) + - (nbit3 << 3) + - (nbit2 << 2) + + atr_ = (ATR)((nbit5 << 5) + + (nbit4 << 4) + + (nbit3 << 3) + + (nbit2 << 2) + (nbit1 << 1) + nbit0); return *this; } - + inline axis_transformation axis_transformation::operator+(const axis_transformation& a) const { axis_transformation retval(*this); return retval+=a; } - + // populate_axis_array writes the three INDIVIDUAL_AXIS values that the // ATR enum value of 'this' represent into axis_array inline void axis_transformation::populate_axis_array(INDIVIDUAL_AXIS axis_array[]) const { @@ -174,24 +174,24 @@ namespace boost { namespace polygon{ bool bit3 = (atr_ & 8) != 0; bool bit2 = (atr_ & 4) != 0; bool bit1 = (atr_ & 2) != 0; - bool bit0 = (atr_ & 1) != 0; - axis_array[2] = + bool bit0 = (atr_ & 1) != 0; + axis_array[2] = (INDIVIDUAL_AXIS)((((int)(!bit4 & !bit5)) << 2) + - ((int)(bit5) << 1) + + ((int)(bit5) << 1) + bit3); - axis_array[1] = + axis_array[1] = (INDIVIDUAL_AXIS)((((int)((bit4 & bit2) | (bit5 & !bit2))) << 2)+ - ((int)(!bit5 & !bit2) << 1) + + ((int)(!bit5 & !bit2) << 1) + bit1); - axis_array[0] = + axis_array[0] = (INDIVIDUAL_AXIS)((((int)((bit5 & bit2) | (bit4 & !bit2))) << 2) + - ((int)(bit2 & !bit5) << 1) + + ((int)(bit2 & !bit5) << 1) + bit0); } - + // combine_axis_arrays concatenates this_array and that_array overwriting // the result into this_array - inline void + inline void axis_transformation::combine_axis_arrays (INDIVIDUAL_AXIS this_array[], const INDIVIDUAL_AXIS that_array[]){ int indexes[3] = {this_array[0] >> 1, @@ -203,21 +203,21 @@ namespace boost { namespace polygon{ }; this_array[0] = that_array[indexes[0]]; this_array[0] = (INDIVIDUAL_AXIS)((int)this_array[0] & (int)((int)PZ+(int)PY)); - this_array[0] = (INDIVIDUAL_AXIS)((int)this_array[0] | - ((int)zero_bits[0][0] ^ + this_array[0] = (INDIVIDUAL_AXIS)((int)this_array[0] | + ((int)zero_bits[0][0] ^ (int)zero_bits[1][indexes[0]])); this_array[1] = that_array[indexes[1]]; this_array[1] = (INDIVIDUAL_AXIS)((int)this_array[1] & (int)((int)PZ+(int)PY)); - this_array[1] = (INDIVIDUAL_AXIS)((int)this_array[1] | - ((int)zero_bits[0][1] ^ + this_array[1] = (INDIVIDUAL_AXIS)((int)this_array[1] | + ((int)zero_bits[0][1] ^ (int)zero_bits[1][indexes[1]])); this_array[2] = that_array[indexes[2]]; this_array[2] = (INDIVIDUAL_AXIS)((int)this_array[2] & (int)((int)PZ+(int)PY)); - this_array[2] = (INDIVIDUAL_AXIS)((int)this_array[2] | - ((int)zero_bits[0][2] ^ + this_array[2] = (INDIVIDUAL_AXIS)((int)this_array[2] | + ((int)zero_bits[0][2] ^ (int)zero_bits[1][indexes[2]])); } - + // write_back_axis_array converts an array of three INDIVIDUAL_AXIS values // to the ATR enum value and sets 'this' to that value inline void axis_transformation::write_back_axis_array(const INDIVIDUAL_AXIS this_array[]) { @@ -230,16 +230,16 @@ namespace boost { namespace polygon{ (bit4 & (((int)this_array[1] & 4) >> 2)); //z->x y->z int bit1 = ((int)this_array[1] & 1); int bit0 = ((int)this_array[0] & 1); - atr_ = ATR((bit5 << 5) + - (bit4 << 4) + - (bit3 << 3) + - (bit2 << 2) + + atr_ = ATR((bit5 << 5) + + (bit4 << 4) + + (bit3 << 3) + + (bit2 << 2) + (bit1 << 1) + bit0); } - + // behavior is deterministic but undefined in the case where illegal - // combinations of directions are passed in. - inline axis_transformation& + // combinations of directions are passed in. + inline axis_transformation& axis_transformation::set_directions(const direction_2d& horizontalDir, const direction_2d& verticalDir){ int bit2 = (static_cast(horizontalDir).to_int()) != 0; @@ -248,42 +248,39 @@ namespace boost { namespace polygon{ atr_ = ATR((bit2 << 2) + (bit1 << 1) + bit0); return *this; } - + // behavior is deterministic but undefined in the case where illegal // combinations of directions are passed in. - inline axis_transformation& axis_transformation::set_directions(const direction_3d& horizontalDir, - const direction_3d& verticalDir, - const direction_3d& proximalDir){ - int this_array[3] = {horizontalDir.to_int(), - verticalDir.to_int(), - proximalDir.to_int()}; - int bit5 = (this_array[2] & 2) != 0; - int bit4 = !(((this_array[2] & 4) != 0) | ((this_array[2] & 2) != 0)); - int bit3 = !((this_array[2] & 1) != 0); + inline axis_transformation& axis_transformation::set_directions( + const direction_3d& horizontalDir, + const direction_3d& verticalDir, + const direction_3d& proximalDir){ + unsigned int this_array[3] = {horizontalDir.to_int(), + verticalDir.to_int(), + proximalDir.to_int()}; + unsigned int bit5 = (this_array[2] & 2) != 0; + unsigned int bit4 = !(((this_array[2] & 4) != 0) | ((this_array[2] & 2) != 0)); + unsigned int bit3 = !((this_array[2] & 1) != 0); //bit 2 is the tricky bit - int bit2 = (!(bit5 | bit4) & ((this_array[0] & 2) != 0 )) | //swap xy - (bit5 & ((this_array[0] & 4) >> 2)) | //z->y x->z - (bit4 & ((this_array[1] & 4) >> 2)); //z->x y->z - int bit1 = !(this_array[1] & 1); - int bit0 = !(this_array[0] & 1); - atr_ = ATR((bit5 << 5) + - (bit4 << 4) + - (bit3 << 3) + - (bit2 << 2) + - (bit1 << 1) + bit0); + unsigned int bit2 = (!(bit5 | bit4) & ((this_array[0] & 2) != 0 )) | //swap xy + (bit5 & ((this_array[0] & 4) >> 2)) | //z->y x->z + (bit4 & ((this_array[1] & 4) >> 2)); //z->x y->z + unsigned int bit1 = !(this_array[1] & 1); + unsigned int bit0 = !(this_array[0] & 1); + atr_ = ATR((bit5 << 5) | (bit4 << 4) | (bit3 << 3) | (bit2 << 2) | (bit1 << 1) | bit0); return *this; } - + template inline void axis_transformation::transform(coordinate_type_2& x, coordinate_type_2& y) const { int bit2 = (atr_ & 4) != 0; int bit1 = (atr_ & 2) != 0; int bit0 = (atr_ & 1) != 0; x *= -((bit0 << 1) - 1); - y *= -((bit1 << 1) - 1); + y *= -((bit1 << 1) - 1); predicated_swap(bit2 != 0,x,y); } - + template inline void axis_transformation::transform(coordinate_type_2& x, coordinate_type_2& y, coordinate_type_2& z) const { int bit5 = (atr_ & 32) != 0; @@ -293,13 +290,13 @@ namespace boost { namespace polygon{ int bit1 = (atr_ & 2) != 0; int bit0 = (atr_ & 1) != 0; x *= -((bit0 << 1) - 1); - y *= -((bit1 << 1) - 1); + y *= -((bit1 << 1) - 1); z *= -((bit3 << 1) - 1); predicated_swap(bit2 != 0, x, y); predicated_swap(bit5 != 0, y, z); predicated_swap(bit4 != 0, x, z); } - + inline axis_transformation& axis_transformation::invert_2d() { int bit2 = ((atr_ & 4) != 0); int bit1 = ((atr_ & 2) != 0); @@ -311,15 +308,15 @@ namespace boost { namespace polygon{ atr_ = (ATR)(atr_ | bit0 | bit1); return *this; } - + inline axis_transformation axis_transformation::inverse_2d() const { axis_transformation retval(*this); return retval.invert_2d(); } - + inline axis_transformation& axis_transformation::invert() { int bit5 = ((atr_ & 32) != 0); - int bit4 = ((atr_ & 16) != 0); + int bit4 = ((atr_ & 16) != 0); int bit3 = ((atr_ & 8) != 0); int bit2 = ((atr_ & 4) != 0); int bit1 = ((atr_ & 2) != 0); @@ -328,24 +325,24 @@ namespace boost { namespace polygon{ predicated_swap(bit4 != 0, bit0, bit3); predicated_swap(bit5 != 0, bit1, bit3); predicated_swap(bit2 != 0, bit0, bit1); - atr_ = (ATR)((bit5 << 5) + - (bit4 << 4) + - (bit3 << 3) + - (bit2 << 2) + + atr_ = (ATR)((bit5 << 5) + + (bit4 << 4) + + (bit3 << 3) + + (bit2 << 2) + (bit1 << 1) + bit0); return *this; } - + inline axis_transformation axis_transformation::inverse() const { axis_transformation retval(*this); return retval.invert(); } - + template inline scale_factor_type anisotropic_scale_factor::get(orientation_3d orient) const { return scale_[orient.to_int()]; } - + template inline void anisotropic_scale_factor::set(orientation_3d orient, scale_factor_type value) { scale_[orient.to_int()] = value; @@ -363,14 +360,14 @@ namespace boost { namespace polygon{ inline void anisotropic_scale_factor::y(scale_factor_type value) { scale_[VERTICAL] = value; } template inline void anisotropic_scale_factor::z(scale_factor_type value) { scale_[PROXIMAL] = value; } - + //concatenation operator (convolve scale factors) template inline anisotropic_scale_factor anisotropic_scale_factor::operator+(const anisotropic_scale_factor& s) const { anisotropic_scale_factor retval(*this); return retval+=s; } - + //concatenate this with that template inline const anisotropic_scale_factor& anisotropic_scale_factor::operator+=(const anisotropic_scale_factor& s){ @@ -379,7 +376,7 @@ namespace boost { namespace polygon{ scale_[2] *= s.scale_[2]; return *this; } - + //transform template inline anisotropic_scale_factor& anisotropic_scale_factor::transform(axis_transformation atr){ @@ -453,30 +450,30 @@ namespace boost { namespace polygon{ } template - inline transformation::transformation(const transformation& tr) : + inline transformation::transformation(const transformation& tr) : atr_(tr.atr_), p_(tr.p_) {;} - + template inline bool transformation::operator==(const transformation& tr) const { return atr_ == tr.atr_ && p_ == tr.p_; } - + template inline bool transformation::operator!=(const transformation& tr) const { return !(*this == tr); } - + template inline bool transformation::operator<(const transformation& tr) const { - return atr_ < tr.atr_ || atr_ == tr.atr_ && p_ < tr.p_; + return atr_ < tr.atr_ || (atr_ == tr.atr_ && p_ < tr.p_); } - + template inline transformation transformation::operator+(const transformation& tr) const { transformation retval(*this); return retval+=tr; } - + template inline const transformation& transformation::operator+=(const transformation& tr){ //apply the inverse transformation of this to the translation point of that @@ -491,24 +488,24 @@ namespace boost { namespace polygon{ atr_ += tr.atr_; return *this; } - + template inline void transformation::set_axis_transformation(const axis_transformation& atr) { atr_ = atr; } - + template template inline void transformation::get_translation(point_type& p) const { assign(p, p_); } - + template template inline void transformation::set_translation(const point_type& p) { assign(p_, p); } - + template inline void transformation::transform(coordinate_type& x, coordinate_type& y) const { //subtract each component of new origin point @@ -525,7 +522,7 @@ namespace boost { namespace polygon{ x -= p_.get(HORIZONTAL); atr_.transform(x,y,z); } - + // sets the axis_transform portion to its inverse // transforms the tranlastion portion by that inverse axis_transform // multiplies the translation portion by -1 to reverse it @@ -540,7 +537,7 @@ namespace boost { namespace polygon{ atr_.invert(); return *this; } - + template inline transformation transformation::inverse() const { transformation retval(*this); @@ -549,5 +546,3 @@ namespace boost { namespace polygon{ } } #endif - - diff --git a/3party/boost/boost/polygon/detail/voronoi_ctypes.hpp b/3party/boost/boost/polygon/detail/voronoi_ctypes.hpp new file mode 100644 index 0000000000..45b97c819e --- /dev/null +++ b/3party/boost/boost/polygon/detail/voronoi_ctypes.hpp @@ -0,0 +1,642 @@ +// Boost.Polygon library detail/voronoi_ctypes.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_DETAIL_VORONOI_CTYPES +#define BOOST_POLYGON_DETAIL_VORONOI_CTYPES + +#include + +#include +#include +#include +#include + +namespace boost { +namespace polygon { +namespace detail { + +typedef boost::int32_t int32; +typedef boost::int64_t int64; +typedef boost::uint32_t uint32; +typedef boost::uint64_t uint64; +typedef double fpt64; + +// If two floating-point numbers in the same format are ordered (x < y), +// then they are ordered the same way when their bits are reinterpreted as +// sign-magnitude integers. Values are considered to be almost equal if +// their integer bits reinterpretations differ in not more than maxUlps units. +template +struct ulp_comparison; + +template <> +struct ulp_comparison { + enum Result { + LESS = -1, + EQUAL = 0, + MORE = 1 + }; + + Result operator()(fpt64 a, fpt64 b, unsigned int maxUlps) const { + uint64 ll_a, ll_b; + + // Reinterpret double bits as 64-bit signed integer. + std::memcpy(&ll_a, &a, sizeof(fpt64)); + std::memcpy(&ll_b, &b, sizeof(fpt64)); + + // Positive 0.0 is integer zero. Negative 0.0 is 0x8000000000000000. + // Map negative zero to an integer zero representation - making it + // identical to positive zero - the smallest negative number is + // represented by negative one, and downwards from there. + if (ll_a < 0x8000000000000000ULL) + ll_a = 0x8000000000000000ULL - ll_a; + if (ll_b < 0x8000000000000000ULL) + ll_b = 0x8000000000000000ULL - ll_b; + + // Compare 64-bit signed integer representations of input values. + // Difference in 1 Ulp is equivalent to a relative error of between + // 1/4,000,000,000,000,000 and 1/8,000,000,000,000,000. + if (ll_a > ll_b) + return (ll_a - ll_b <= maxUlps) ? EQUAL : LESS; + return (ll_b - ll_a <= maxUlps) ? EQUAL : MORE; + } +}; + +template +struct extened_exponent_fpt_traits; + +template <> +class extened_exponent_fpt_traits { + public: + typedef int exp_type; + enum { + MAX_SIGNIFICANT_EXP_DIF = 54 + }; +}; + +// Floating point type wrapper. Allows to extend exponent boundaries to the +// integer type range. This class does not handle division by zero, subnormal +// numbers or NaNs. +template > +class extended_exponent_fpt { + public: + typedef _fpt fpt_type; + typedef typename _traits::exp_type exp_type; + + explicit extended_exponent_fpt(fpt_type val) { + val_ = std::frexp(val, &exp_); + } + + extended_exponent_fpt(fpt_type val, exp_type exp) { + val_ = std::frexp(val, &exp_); + exp_ += exp; + } + + bool is_pos() const { + return val_ > 0; + } + + bool is_neg() const { + return val_ < 0; + } + + bool is_zero() const { + return val_ == 0; + } + + extended_exponent_fpt operator-() const { + return extended_exponent_fpt(-val_, exp_); + } + + extended_exponent_fpt operator+(const extended_exponent_fpt& that) const { + if (this->val_ == 0.0 || + that.exp_ > this->exp_ + _traits::MAX_SIGNIFICANT_EXP_DIF) { + return that; + } + if (that.val_ == 0.0 || + this->exp_ > that.exp_ + _traits::MAX_SIGNIFICANT_EXP_DIF) { + return *this; + } + if (this->exp_ >= that.exp_) { + exp_type exp_dif = this->exp_ - that.exp_; + fpt_type val = std::ldexp(this->val_, exp_dif) + that.val_; + return extended_exponent_fpt(val, that.exp_); + } else { + exp_type exp_dif = that.exp_ - this->exp_; + fpt_type val = std::ldexp(that.val_, exp_dif) + this->val_; + return extended_exponent_fpt(val, this->exp_); + } + } + + extended_exponent_fpt operator-(const extended_exponent_fpt& that) const { + if (this->val_ == 0.0 || + that.exp_ > this->exp_ + _traits::MAX_SIGNIFICANT_EXP_DIF) { + return extended_exponent_fpt(-that.val_, that.exp_); + } + if (that.val_ == 0.0 || + this->exp_ > that.exp_ + _traits::MAX_SIGNIFICANT_EXP_DIF) { + return *this; + } + if (this->exp_ >= that.exp_) { + exp_type exp_dif = this->exp_ - that.exp_; + fpt_type val = std::ldexp(this->val_, exp_dif) - that.val_; + return extended_exponent_fpt(val, that.exp_); + } else { + exp_type exp_dif = that.exp_ - this->exp_; + fpt_type val = std::ldexp(-that.val_, exp_dif) + this->val_; + return extended_exponent_fpt(val, this->exp_); + } + } + + extended_exponent_fpt operator*(const extended_exponent_fpt& that) const { + fpt_type val = this->val_ * that.val_; + exp_type exp = this->exp_ + that.exp_; + return extended_exponent_fpt(val, exp); + } + + extended_exponent_fpt operator/(const extended_exponent_fpt& that) const { + fpt_type val = this->val_ / that.val_; + exp_type exp = this->exp_ - that.exp_; + return extended_exponent_fpt(val, exp); + } + + extended_exponent_fpt& operator+=(const extended_exponent_fpt& that) { + return *this = *this + that; + } + + extended_exponent_fpt& operator-=(const extended_exponent_fpt& that) { + return *this = *this - that; + } + + extended_exponent_fpt& operator*=(const extended_exponent_fpt& that) { + return *this = *this * that; + } + + extended_exponent_fpt& operator/=(const extended_exponent_fpt& that) { + return *this = *this / that; + } + + extended_exponent_fpt sqrt() const { + fpt_type val = val_; + exp_type exp = exp_; + if (exp & 1) { + val *= 2.0; + --exp; + } + return extended_exponent_fpt(std::sqrt(val), exp >> 1); + } + + fpt_type d() const { + return std::ldexp(val_, exp_); + } + + private: + fpt_type val_; + exp_type exp_; +}; +typedef extended_exponent_fpt efpt64; + +template +extended_exponent_fpt<_fpt> get_sqrt(const extended_exponent_fpt<_fpt>& that) { + return that.sqrt(); +} + +template +bool is_pos(const extended_exponent_fpt<_fpt>& that) { + return that.is_pos(); +} + +template +bool is_neg(const extended_exponent_fpt<_fpt>& that) { + return that.is_neg(); +} + +template +bool is_zero(const extended_exponent_fpt<_fpt>& that) { + return that.is_zero(); +} + +// Very efficient stack allocated big integer class. +// Supports next set of arithmetic operations: +, -, *. +template +class extended_int { + public: + extended_int() {} + + extended_int(int32 that) { + if (that > 0) { + this->chunks_[0] = that; + this->count_ = 1; + } else if (that < 0) { + this->chunks_[0] = -that; + this->count_ = -1; + } else { + this->count_ = 0; + } + } + + extended_int(int64 that) { + if (that > 0) { + this->chunks_[0] = static_cast(that); + this->chunks_[1] = that >> 32; + this->count_ = this->chunks_[1] ? 2 : 1; + } else if (that < 0) { + that = -that; + this->chunks_[0] = static_cast(that); + this->chunks_[1] = that >> 32; + this->count_ = this->chunks_[1] ? -2 : -1; + } else { + this->count_ = 0; + } + } + + extended_int(const std::vector& chunks, bool plus = true) { + this->count_ = static_cast((std::min)(N, chunks.size())); + for (int i = 0; i < this->count_; ++i) + this->chunks_[i] = chunks[chunks.size() - i - 1]; + if (!plus) + this->count_ = -this->count_; + } + + template + extended_int(const extended_int& that) { + this->count_ = that.count(); + std::memcpy(this->chunks_, that.chunks(), that.size() * sizeof(uint32)); + } + + extended_int& operator=(int32 that) { + if (that > 0) { + this->chunks_[0] = that; + this->count_ = 1; + } else if (that < 0) { + this->chunks_[0] = -that; + this->count_ = -1; + } else { + this->count_ = 0; + } + return *this; + } + + extended_int& operator=(int64 that) { + if (that > 0) { + this->chunks_[0] = static_cast(that); + this->chunks_[1] = that >> 32; + this->count_ = this->chunks_[1] ? 2 : 1; + } else if (that < 0) { + that = -that; + this->chunks_[0] = static_cast(that); + this->chunks_[1] = that >> 32; + this->count_ = this->chunks_[1] ? -2 : -1; + } else { + this->count_ = 0; + } + return *this; + } + + template + extended_int& operator=(const extended_int& that) { + this->count_ = that.count(); + std::memcpy(this->chunks_, that.chunks(), that.size() * sizeof(uint32)); + return *this; + } + + bool is_pos() const { + return this->count_ > 0; + } + + bool is_neg() const { + return this->count_ < 0; + } + + bool is_zero() const { + return this->count_ == 0; + } + + bool operator==(const extended_int& that) const { + if (this->count_ != that.count()) + return false; + for (std::size_t i = 0; i < this->size(); ++i) + if (this->chunks_[i] != that.chunks()[i]) + return false; + return true; + } + + bool operator!=(const extended_int& that) const { + return !(*this == that); + } + + bool operator<(const extended_int& that) const { + if (this->count_ != that.count()) + return this->count_ < that.count(); + std::size_t i = this->size(); + if (!i) + return false; + do { + --i; + if (this->chunks_[i] != that.chunks()[i]) + return (this->chunks_[i] < that.chunks()[i]) ^ (this->count_ < 0); + } while (i); + return false; + } + + bool operator>(const extended_int& that) const { + return that < *this; + } + + bool operator<=(const extended_int& that) const { + return !(that < *this); + } + + bool operator>=(const extended_int& that) const { + return !(*this < that); + } + + extended_int operator-() const { + extended_int ret_val = *this; + ret_val.neg(); + return ret_val; + } + + void neg() { + this->count_ = -this->count_; + } + + extended_int operator+(const extended_int& that) const { + extended_int ret_val; + ret_val.add(*this, that); + return ret_val; + } + + void add(const extended_int& e1, const extended_int& e2) { + if (!e1.count()) { + *this = e2; + return; + } + if (!e2.count()) { + *this = e1; + return; + } + if ((e1.count() > 0) ^ (e2.count() > 0)) { + dif(e1.chunks(), e1.size(), e2.chunks(), e2.size()); + } else { + add(e1.chunks(), e1.size(), e2.chunks(), e2.size()); + } + if (e1.count() < 0) + this->count_ = -this->count_; + } + + extended_int operator-(const extended_int& that) const { + extended_int ret_val; + ret_val.dif(*this, that); + return ret_val; + } + + void dif(const extended_int& e1, const extended_int& e2) { + if (!e1.count()) { + *this = e2; + this->count_ = -this->count_; + return; + } + if (!e2.count()) { + *this = e1; + return; + } + if ((e1.count() > 0) ^ (e2.count() > 0)) { + add(e1.chunks(), e1.size(), e2.chunks(), e2.size()); + } else { + dif(e1.chunks(), e1.size(), e2.chunks(), e2.size()); + } + if (e1.count() < 0) + this->count_ = -this->count_; + } + + extended_int operator*(int32 that) const { + extended_int temp(that); + return (*this) * temp; + } + + extended_int operator*(int64 that) const { + extended_int temp(that); + return (*this) * temp; + } + + extended_int operator*(const extended_int& that) const { + extended_int ret_val; + ret_val.mul(*this, that); + return ret_val; + } + + void mul(const extended_int& e1, const extended_int& e2) { + if (!e1.count() || !e2.count()) { + this->count_ = 0; + return; + } + mul(e1.chunks(), e1.size(), e2.chunks(), e2.size()); + if ((e1.count() > 0) ^ (e2.count() > 0)) + this->count_ = -this->count_; + } + + const uint32* chunks() const { + return chunks_; + } + + int32 count() const { + return count_; + } + + std::size_t size() const { + return (std::abs)(count_); + } + + std::pair p() const { + std::pair ret_val(0, 0); + std::size_t sz = this->size(); + if (!sz) { + return ret_val; + } else { + if (sz == 1) { + ret_val.first = static_cast(this->chunks_[0]); + } else if (sz == 2) { + ret_val.first = static_cast(this->chunks_[1]) * + static_cast(0x100000000LL) + + static_cast(this->chunks_[0]); + } else { + for (std::size_t i = 1; i <= 3; ++i) { + ret_val.first *= static_cast(0x100000000LL); + ret_val.first += static_cast(this->chunks_[sz - i]); + } + ret_val.second = (sz - 3) << 5; + } + } + if (this->count_ < 0) + ret_val.first = -ret_val.first; + return ret_val; + } + + fpt64 d() const { + std::pair p = this->p(); + return std::ldexp(p.first, p.second); + } + + private: + void add(const uint32* c1, std::size_t sz1, + const uint32* c2, std::size_t sz2) { + if (sz1 < sz2) { + add(c2, sz2, c1, sz1); + return; + } + this->count_ = sz1; + uint64 temp = 0; + for (std::size_t i = 0; i < sz2; ++i) { + temp += static_cast(c1[i]) + static_cast(c2[i]); + this->chunks_[i] = static_cast(temp); + temp >>= 32; + } + for (std::size_t i = sz2; i < sz1; ++i) { + temp += static_cast(c1[i]); + this->chunks_[i] = static_cast(temp); + temp >>= 32; + } + if (temp && (this->count_ != N)) { + this->chunks_[this->count_] = static_cast(temp); + ++this->count_; + } + } + + void dif(const uint32* c1, std::size_t sz1, + const uint32* c2, std::size_t sz2, + bool rec = false) { + if (sz1 < sz2) { + dif(c2, sz2, c1, sz1, true); + this->count_ = -this->count_; + return; + } else if ((sz1 == sz2) && !rec) { + do { + --sz1; + if (c1[sz1] < c2[sz1]) { + ++sz1; + dif(c2, sz1, c1, sz1, true); + this->count_ = -this->count_; + return; + } else if (c1[sz1] > c2[sz1]) { + ++sz1; + break; + } + } while (sz1); + if (!sz1) { + this->count_ = 0; + return; + } + sz2 = sz1; + } + this->count_ = sz1-1; + bool flag = false; + for (std::size_t i = 0; i < sz2; ++i) { + this->chunks_[i] = c1[i] - c2[i] - (flag?1:0); + flag = (c1[i] < c2[i]) || ((c1[i] == c2[i]) && flag); + } + for (std::size_t i = sz2; i < sz1; ++i) { + this->chunks_[i] = c1[i] - (flag?1:0); + flag = !c1[i] && flag; + } + if (this->chunks_[this->count_]) + ++this->count_; + } + + void mul(const uint32* c1, std::size_t sz1, + const uint32* c2, std::size_t sz2) { + uint64 cur = 0, nxt, tmp; + this->count_ = static_cast((std::min)(N, sz1 + sz2 - 1)); + for (std::size_t shift = 0; shift < static_cast(this->count_); + ++shift) { + nxt = 0; + for (std::size_t first = 0; first <= shift; ++first) { + if (first >= sz1) + break; + std::size_t second = shift - first; + if (second >= sz2) + continue; + tmp = static_cast(c1[first]) * static_cast(c2[second]); + cur += static_cast(tmp); + nxt += tmp >> 32; + } + this->chunks_[shift] = static_cast(cur); + cur = nxt + (cur >> 32); + } + if (cur && (this->count_ != N)) { + this->chunks_[this->count_] = static_cast(cur); + ++this->count_; + } + } + + uint32 chunks_[N]; + int32 count_; +}; + +template +bool is_pos(const extended_int& that) { + return that.count() > 0; +} + +template +bool is_neg(const extended_int& that) { + return that.count() < 0; +} + +template +bool is_zero(const extended_int& that) { + return !that.count(); +} + +struct type_converter_fpt { + template + fpt64 operator()(const T& that) const { + return static_cast(that); + } + + template + fpt64 operator()(const extended_int& that) const { + return that.d(); + } + + fpt64 operator()(const extended_exponent_fpt& that) const { + return that.d(); + } +}; + +struct type_converter_efpt { + template + extended_exponent_fpt operator()(const extended_int& that) const { + std::pair p = that.p(); + return extended_exponent_fpt(p.first, p.second); + } +}; + +// Voronoi coordinate type traits make it possible to extend algorithm +// input coordinate range to any user provided integer type and algorithm +// output coordinate range to any ieee-754 like floating point type. +template +struct voronoi_ctype_traits; + +template <> +struct voronoi_ctype_traits { + typedef int32 int_type; + typedef int64 int_x2_type; + typedef uint64 uint_x2_type; + typedef extended_int<64> big_int_type; + typedef fpt64 fpt_type; + typedef extended_exponent_fpt efpt_type; + typedef ulp_comparison ulp_cmp_type; + typedef type_converter_fpt to_fpt_converter_type; + typedef type_converter_efpt to_efpt_converter_type; +}; +} // detail +} // polygon +} // boost + +#endif // BOOST_POLYGON_DETAIL_VORONOI_CTYPES diff --git a/3party/boost/boost/polygon/detail/voronoi_predicates.hpp b/3party/boost/boost/polygon/detail/voronoi_predicates.hpp new file mode 100644 index 0000000000..fbaa96bca7 --- /dev/null +++ b/3party/boost/boost/polygon/detail/voronoi_predicates.hpp @@ -0,0 +1,1526 @@ +// Boost.Polygon library detail/voronoi_predicates.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_DETAIL_VORONOI_PREDICATES +#define BOOST_POLYGON_DETAIL_VORONOI_PREDICATES + +#include + +#include "voronoi_robust_fpt.hpp" + +namespace boost { +namespace polygon { +namespace detail { + +// Predicate utilities. Operates with the coordinate types that could +// be converted to the 32-bit signed integer without precision loss. +template +class voronoi_predicates { + public: + typedef typename CTYPE_TRAITS::int_type int_type; + typedef typename CTYPE_TRAITS::int_x2_type int_x2_type; + typedef typename CTYPE_TRAITS::uint_x2_type uint_x2_type; + typedef typename CTYPE_TRAITS::big_int_type big_int_type; + typedef typename CTYPE_TRAITS::fpt_type fpt_type; + typedef typename CTYPE_TRAITS::efpt_type efpt_type; + typedef typename CTYPE_TRAITS::ulp_cmp_type ulp_cmp_type; + typedef typename CTYPE_TRAITS::to_fpt_converter_type to_fpt_converter; + typedef typename CTYPE_TRAITS::to_efpt_converter_type to_efpt_converter; + + enum { + ULPS = 64, + ULPSx2 = 128 + }; + + template + static bool is_vertical(const Point& point1, const Point& point2) { + return point1.x() == point2.x(); + } + + template + static bool is_vertical(const Site& site) { + return is_vertical(site.point0(), site.point1()); + } + + // Compute robust cross_product: a1 * b2 - b1 * a2. + // It was mathematically proven that the result is correct + // with epsilon relative error equal to 1EPS. + static fpt_type robust_cross_product(int_x2_type a1_, + int_x2_type b1_, + int_x2_type a2_, + int_x2_type b2_) { + static to_fpt_converter to_fpt; + uint_x2_type a1 = static_cast(is_neg(a1_) ? -a1_ : a1_); + uint_x2_type b1 = static_cast(is_neg(b1_) ? -b1_ : b1_); + uint_x2_type a2 = static_cast(is_neg(a2_) ? -a2_ : a2_); + uint_x2_type b2 = static_cast(is_neg(b2_) ? -b2_ : b2_); + + uint_x2_type l = a1 * b2; + uint_x2_type r = b1 * a2; + + if (is_neg(a1_) ^ is_neg(b2_)) { + if (is_neg(a2_) ^ is_neg(b1_)) + return (l > r) ? -to_fpt(l - r) : to_fpt(r - l); + else + return -to_fpt(l + r); + } else { + if (is_neg(a2_) ^ is_neg(b1_)) + return to_fpt(l + r); + else + return (l < r) ? -to_fpt(r - l) : to_fpt(l - r); + } + } + + typedef struct orientation_test { + public: + // Represents orientation test result. + enum Orientation { + RIGHT = -1, + COLLINEAR = 0, + LEFT = 1 + }; + + // Value is a determinant of two vectors (e.g. x1 * y2 - x2 * y1). + // Return orientation based on the sign of the determinant. + template + static Orientation eval(T value) { + if (is_zero(value)) return COLLINEAR; + return (is_neg(value)) ? RIGHT : LEFT; + } + + static Orientation eval(int_x2_type dif_x1_, + int_x2_type dif_y1_, + int_x2_type dif_x2_, + int_x2_type dif_y2_) { + return eval(robust_cross_product(dif_x1_, dif_y1_, dif_x2_, dif_y2_)); + } + + template + static Orientation eval(const Point& point1, + const Point& point2, + const Point& point3) { + int_x2_type dx1 = static_cast(point1.x()) - + static_cast(point2.x()); + int_x2_type dx2 = static_cast(point2.x()) - + static_cast(point3.x()); + int_x2_type dy1 = static_cast(point1.y()) - + static_cast(point2.y()); + int_x2_type dy2 = static_cast(point2.y()) - + static_cast(point3.y()); + return eval(robust_cross_product(dx1, dy1, dx2, dy2)); + } + } ot; + + template + class point_comparison_predicate { + public: + typedef Point point_type; + + bool operator()(const point_type& lhs, const point_type& rhs) const { + if (lhs.x() == rhs.x()) + return lhs.y() < rhs.y(); + return lhs.x() < rhs.x(); + } + }; + + template + class event_comparison_predicate { + public: + typedef Site site_type; + typedef Circle circle_type; + + bool operator()(const site_type& lhs, const site_type& rhs) const { + if (lhs.x0() != rhs.x0()) + return lhs.x0() < rhs.x0(); + if (!lhs.is_segment()) { + if (!rhs.is_segment()) + return lhs.y0() < rhs.y0(); + if (is_vertical(rhs)) + return lhs.y0() <= rhs.y0(); + return true; + } else { + if (is_vertical(rhs)) { + if (is_vertical(lhs)) + return lhs.y0() < rhs.y0(); + return false; + } + if (is_vertical(lhs)) + return true; + if (lhs.y0() != rhs.y0()) + return lhs.y0() < rhs.y0(); + return ot::eval(lhs.point1(), lhs.point0(), rhs.point1()) == ot::LEFT; + } + } + + bool operator()(const site_type& lhs, const circle_type& rhs) const { + typename ulp_cmp_type::Result xCmp = + ulp_cmp(to_fpt(lhs.x()), to_fpt(rhs.lower_x()), ULPS); + if (xCmp != ulp_cmp_type::EQUAL) + return xCmp == ulp_cmp_type::LESS; + typename ulp_cmp_type::Result yCmp = + ulp_cmp(to_fpt(lhs.y()), to_fpt(rhs.lower_y()), ULPS); + return yCmp == ulp_cmp_type::LESS; + } + + bool operator()(const circle_type& lhs, const site_type& rhs) const { + typename ulp_cmp_type::Result xCmp = + ulp_cmp(to_fpt(lhs.lower_x()), to_fpt(rhs.x()), ULPS); + if (xCmp != ulp_cmp_type::EQUAL) + return xCmp == ulp_cmp_type::LESS; + typename ulp_cmp_type::Result yCmp = + ulp_cmp(to_fpt(lhs.lower_y()), to_fpt(rhs.y()), ULPS); + return yCmp == ulp_cmp_type::LESS; + } + + bool operator()(const circle_type& lhs, const circle_type& rhs) const { + typename ulp_cmp_type::Result xCmp = + ulp_cmp(to_fpt(lhs.lower_x()), to_fpt(rhs.lower_x()), ULPSx2); + if (xCmp != ulp_cmp_type::EQUAL) + return xCmp == ulp_cmp_type::LESS; + typename ulp_cmp_type::Result yCmp = + ulp_cmp(to_fpt(lhs.lower_y()), to_fpt(rhs.lower_y()), ULPSx2); + return yCmp == ulp_cmp_type::LESS; + } + + private: + ulp_cmp_type ulp_cmp; + to_fpt_converter to_fpt; + }; + + template + class distance_predicate { + public: + typedef Site site_type; + + // Returns true if a horizontal line going through a new site intersects + // right arc at first, else returns false. If horizontal line goes + // through intersection point of the given two arcs returns false also. + bool operator()(const site_type& left_site, + const site_type& right_site, + const site_type& new_site) const { + if (!left_site.is_segment()) { + if (!right_site.is_segment()) { + return pp(left_site, right_site, new_site); + } else { + return ps(left_site, right_site, new_site, false); + } + } else { + if (!right_site.is_segment()) { + return ps(right_site, left_site, new_site, true); + } else { + return ss(left_site, right_site, new_site); + } + } + } + + private: + // Represents the result of the epsilon robust predicate. If the + // result is undefined some further processing is usually required. + enum kPredicateResult { + LESS = -1, + UNDEFINED = 0, + MORE = 1 + }; + + typedef typename Site::point_type point_type; + + // Robust predicate, avoids using high-precision libraries. + // Returns true if a horizontal line going through the new point site + // intersects right arc at first, else returns false. If horizontal line + // goes through intersection point of the given two arcs returns false. + bool pp(const site_type& left_site, + const site_type& right_site, + const site_type& new_site) const { + const point_type& left_point = left_site.point0(); + const point_type& right_point = right_site.point0(); + const point_type& new_point = new_site.point0(); + if (left_point.x() > right_point.x()) { + if (new_point.y() <= left_point.y()) + return false; + } else if (left_point.x() < right_point.x()) { + if (new_point.y() >= right_point.y()) + return true; + } else { + return static_cast(left_point.y()) + + static_cast(right_point.y()) < + static_cast(new_point.y()) * 2; + } + + fpt_type dist1 = find_distance_to_point_arc(left_site, new_point); + fpt_type dist2 = find_distance_to_point_arc(right_site, new_point); + + // The undefined ulp range is equal to 3EPS + 3EPS <= 6ULP. + return dist1 < dist2; + } + + bool ps(const site_type& left_site, const site_type& right_site, + const site_type& new_site, bool reverse_order) const { + kPredicateResult fast_res = fast_ps( + left_site, right_site, new_site, reverse_order); + if (fast_res != UNDEFINED) + return (fast_res == LESS); + + fpt_type dist1 = find_distance_to_point_arc( + left_site, new_site.point0()); + fpt_type dist2 = find_distance_to_segment_arc( + right_site, new_site.point0()); + + // The undefined ulp range is equal to 3EPS + 7EPS <= 10ULP. + return reverse_order ^ (dist1 < dist2); + } + + bool ss(const site_type& left_site, + const site_type& right_site, + const site_type& new_site) const { + // Handle temporary segment sites. + if (left_site.point0() == right_site.point0() && + left_site.point1() == right_site.point1()) { + return ot::eval(left_site.point0(), + left_site.point1(), + new_site.point0()) == ot::LEFT; + } + + fpt_type dist1 = find_distance_to_segment_arc( + left_site, new_site.point0()); + fpt_type dist2 = find_distance_to_segment_arc( + right_site, new_site.point0()); + + // The undefined ulp range is equal to 7EPS + 7EPS <= 14ULP. + return dist1 < dist2; + } + + fpt_type find_distance_to_point_arc( + const site_type& site, const point_type& point) const { + fpt_type dx = to_fpt(site.x()) - to_fpt(point.x()); + fpt_type dy = to_fpt(site.y()) - to_fpt(point.y()); + // The relative error is at most 3EPS. + return (dx * dx + dy * dy) / (to_fpt(2.0) * dx); + } + + fpt_type find_distance_to_segment_arc( + const site_type& site, const point_type& point) const { + if (is_vertical(site)) { + return (to_fpt(site.x()) - to_fpt(point.x())) * to_fpt(0.5); + } else { + const point_type& segment0 = site.point0(true); + const point_type& segment1 = site.point1(true); + fpt_type a1 = to_fpt(segment1.x()) - to_fpt(segment0.x()); + fpt_type b1 = to_fpt(segment1.y()) - to_fpt(segment0.y()); + fpt_type k = get_sqrt(a1 * a1 + b1 * b1); + // Avoid subtraction while computing k. + if (!is_neg(b1)) { + k = to_fpt(1.0) / (b1 + k); + } else { + k = (k - b1) / (a1 * a1); + } + // The relative error is at most 7EPS. + return k * robust_cross_product( + static_cast(segment1.x()) - + static_cast(segment0.x()), + static_cast(segment1.y()) - + static_cast(segment0.y()), + static_cast(point.x()) - + static_cast(segment0.x()), + static_cast(point.y()) - + static_cast(segment0.y())); + } + } + + kPredicateResult fast_ps( + const site_type& left_site, const site_type& right_site, + const site_type& new_site, bool reverse_order) const { + const point_type& site_point = left_site.point0(); + const point_type& segment_start = right_site.point0(true); + const point_type& segment_end = right_site.point1(true); + const point_type& new_point = new_site.point0(); + + if (ot::eval(segment_start, segment_end, new_point) != ot::RIGHT) + return (!right_site.is_inverse()) ? LESS : MORE; + + fpt_type dif_x = to_fpt(new_point.x()) - to_fpt(site_point.x()); + fpt_type dif_y = to_fpt(new_point.y()) - to_fpt(site_point.y()); + fpt_type a = to_fpt(segment_end.x()) - to_fpt(segment_start.x()); + fpt_type b = to_fpt(segment_end.y()) - to_fpt(segment_start.y()); + + if (is_vertical(right_site)) { + if (new_point.y() < site_point.y() && !reverse_order) + return MORE; + else if (new_point.y() > site_point.y() && reverse_order) + return LESS; + return UNDEFINED; + } else { + typename ot::Orientation orientation = ot::eval( + static_cast(segment_end.x()) - + static_cast(segment_start.x()), + static_cast(segment_end.y()) - + static_cast(segment_start.y()), + static_cast(new_point.x()) - + static_cast(site_point.x()), + static_cast(new_point.y()) - + static_cast(site_point.y())); + if (orientation == ot::LEFT) { + if (!right_site.is_inverse()) + return reverse_order ? LESS : UNDEFINED; + return reverse_order ? UNDEFINED : MORE; + } + } + + fpt_type fast_left_expr = a * (dif_y + dif_x) * (dif_y - dif_x); + fpt_type fast_right_expr = (to_fpt(2.0) * b) * dif_x * dif_y; + typename ulp_cmp_type::Result expr_cmp = + ulp_cmp(fast_left_expr, fast_right_expr, 4); + if (expr_cmp != ulp_cmp_type::EQUAL) { + if ((expr_cmp == ulp_cmp_type::MORE) ^ reverse_order) + return reverse_order ? LESS : MORE; + return UNDEFINED; + } + return UNDEFINED; + } + + private: + ulp_cmp_type ulp_cmp; + to_fpt_converter to_fpt; + }; + + template + class node_comparison_predicate { + public: + typedef Node node_type; + typedef typename Node::site_type site_type; + typedef typename site_type::coordinate_type coordinate_type; + typedef distance_predicate distance_predicate_type; + + // Compares nodes in the balanced binary search tree. Nodes are + // compared based on the y coordinates of the arcs intersection points. + // Nodes with less y coordinate of the intersection point go first. + // Comparison is only called during the new site events processing. + // That's why one of the nodes will always lie on the sweepline and may + // be represented as a straight horizontal line. + bool operator() (const node_type& node1, + const node_type& node2) const { + // Get x coordinate of the rightmost site from both nodes. + const site_type& site1 = get_comparison_site(node1); + const site_type& site2 = get_comparison_site(node2); + + if (site1.x() < site2.x()) { + // The second node contains a new site. + return predicate_(node1.left_site(), node1.right_site(), site2); + } else if (site1.x() > site2.x()) { + // The first node contains a new site. + return !predicate_(node2.left_site(), node2.right_site(), site1); + } else { + // This checks were evaluated experimentally. + if (site1.sorted_index() == site2.sorted_index()) { + // Both nodes are new (inserted during same site event processing). + return get_comparison_y(node1) < get_comparison_y(node2); + } else if (site1.sorted_index() < site2.sorted_index()) { + std::pair y1 = get_comparison_y(node1, false); + std::pair y2 = get_comparison_y(node2, true); + if (y1.first != y2.first) return y1.first < y2.first; + return (!site1.is_segment()) ? (y1.second < 0) : false; + } else { + std::pair y1 = get_comparison_y(node1, true); + std::pair y2 = get_comparison_y(node2, false); + if (y1.first != y2.first) return y1.first < y2.first; + return (!site2.is_segment()) ? (y2.second > 0) : true; + } + } + } + + private: + // Get the newer site. + const site_type& get_comparison_site(const node_type& node) const { + if (node.left_site().sorted_index() > node.right_site().sorted_index()) { + return node.left_site(); + } + return node.right_site(); + } + + // Get comparison pair: y coordinate and direction of the newer site. + std::pair get_comparison_y( + const node_type& node, bool is_new_node = true) const { + if (node.left_site().sorted_index() == + node.right_site().sorted_index()) { + return std::make_pair(node.left_site().y(), 0); + } + if (node.left_site().sorted_index() > node.right_site().sorted_index()) { + if (!is_new_node && + node.left_site().is_segment() && + is_vertical(node.left_site())) { + return std::make_pair(node.left_site().y1(), 1); + } + return std::make_pair(node.left_site().y(), 1); + } + return std::make_pair(node.right_site().y(), -1); + } + + distance_predicate_type predicate_; + }; + + template + class circle_existence_predicate { + public: + typedef typename Site::point_type point_type; + typedef Site site_type; + + bool ppp(const site_type& site1, + const site_type& site2, + const site_type& site3) const { + return ot::eval(site1.point0(), site2.point0(), site3.point0()) == + ot::RIGHT; + } + + bool pps(const site_type& site1, + const site_type& site2, + const site_type& site3, + int segment_index) const { + if (segment_index != 2) { + typename ot::Orientation orient1 = ot::eval(site1.point0(), + site2.point0(), site3.point0(true)); + typename ot::Orientation orient2 = ot::eval(site1.point0(), + site2.point0(), site3.point1(true)); + if (segment_index == 1 && site1.x0() >= site2.x0()) { + if (orient1 != ot::RIGHT) + return false; + } else if (segment_index == 3 && site2.x0() >= site1.x0()) { + if (orient2 != ot::RIGHT) + return false; + } else if (orient1 != ot::RIGHT && orient2 != ot::RIGHT) { + return false; + } + } else { + if (site3.point0(true) == site1.point0() && + site3.point1(true) == site2.point0()) + return false; + } + return true; + } + + bool pss(const site_type& site1, + const site_type& site2, + const site_type& site3, + int point_index) const { + if (site2.point0() == site3.point0() && + site2.point1() == site3.point1()) { + return false; + } + if (point_index == 2) { + if (!site2.is_inverse() && site3.is_inverse()) + return false; + if (site2.is_inverse() == site3.is_inverse() && + ot::eval(site2.point0(true), + site1.point0(), + site3.point1(true)) != ot::RIGHT) + return false; + } + return true; + } + + bool sss(const site_type& site1, + const site_type& site2, + const site_type& site3) const { + if (site1.point0() == site2.point0() && site1.point1() == site2.point1()) + return false; + if (site2.point0() == site3.point0() && site2.point1() == site3.point1()) + return false; + return true; + } + }; + + template + class mp_circle_formation_functor { + public: + typedef typename Site::point_type point_type; + typedef Site site_type; + typedef Circle circle_type; + typedef robust_sqrt_expr + robust_sqrt_expr_type; + + void ppp(const site_type& site1, + const site_type& site2, + const site_type& site3, + circle_type& circle, + bool recompute_c_x = true, + bool recompute_c_y = true, + bool recompute_lower_x = true) { + big_int_type dif_x[3], dif_y[3], sum_x[2], sum_y[2]; + dif_x[0] = static_cast(site1.x()) - + static_cast(site2.x()); + dif_x[1] = static_cast(site2.x()) - + static_cast(site3.x()); + dif_x[2] = static_cast(site1.x()) - + static_cast(site3.x()); + dif_y[0] = static_cast(site1.y()) - + static_cast(site2.y()); + dif_y[1] = static_cast(site2.y()) - + static_cast(site3.y()); + dif_y[2] = static_cast(site1.y()) - + static_cast(site3.y()); + sum_x[0] = static_cast(site1.x()) + + static_cast(site2.x()); + sum_x[1] = static_cast(site2.x()) + + static_cast(site3.x()); + sum_y[0] = static_cast(site1.y()) + + static_cast(site2.y()); + sum_y[1] = static_cast(site2.y()) + + static_cast(site3.y()); + fpt_type inv_denom = to_fpt(0.5) / to_fpt(static_cast( + dif_x[0] * dif_y[1] - dif_x[1] * dif_y[0])); + big_int_type numer1 = dif_x[0] * sum_x[0] + dif_y[0] * sum_y[0]; + big_int_type numer2 = dif_x[1] * sum_x[1] + dif_y[1] * sum_y[1]; + + if (recompute_c_x || recompute_lower_x) { + big_int_type c_x = numer1 * dif_y[1] - numer2 * dif_y[0]; + circle.x(to_fpt(c_x) * inv_denom); + + if (recompute_lower_x) { + // Evaluate radius of the circle. + big_int_type sqr_r = (dif_x[0] * dif_x[0] + dif_y[0] * dif_y[0]) * + (dif_x[1] * dif_x[1] + dif_y[1] * dif_y[1]) * + (dif_x[2] * dif_x[2] + dif_y[2] * dif_y[2]); + fpt_type r = get_sqrt(to_fpt(sqr_r)); + + // If c_x >= 0 then lower_x = c_x + r, + // else lower_x = (c_x * c_x - r * r) / (c_x - r). + // To guarantee epsilon relative error. + if (!is_neg(circle.x())) { + if (!is_neg(inv_denom)) { + circle.lower_x(circle.x() + r * inv_denom); + } else { + circle.lower_x(circle.x() - r * inv_denom); + } + } else { + big_int_type numer = c_x * c_x - sqr_r; + fpt_type lower_x = to_fpt(numer) * inv_denom / (to_fpt(c_x) + r); + circle.lower_x(lower_x); + } + } + } + + if (recompute_c_y) { + big_int_type c_y = numer2 * dif_x[0] - numer1 * dif_x[1]; + circle.y(to_fpt(c_y) * inv_denom); + } + } + + // Recompute parameters of the circle event using high-precision library. + void pps(const site_type& site1, + const site_type& site2, + const site_type& site3, + int segment_index, + circle_type& c_event, + bool recompute_c_x = true, + bool recompute_c_y = true, + bool recompute_lower_x = true) { + big_int_type cA[4], cB[4]; + big_int_type line_a = static_cast(site3.point1(true).y()) - + static_cast(site3.point0(true).y()); + big_int_type line_b = static_cast(site3.point0(true).x()) - + static_cast(site3.point1(true).x()); + big_int_type segm_len = line_a * line_a + line_b * line_b; + big_int_type vec_x = static_cast(site2.y()) - + static_cast(site1.y()); + big_int_type vec_y = static_cast(site1.x()) - + static_cast(site2.x()); + big_int_type sum_x = static_cast(site1.x()) + + static_cast(site2.x()); + big_int_type sum_y = static_cast(site1.y()) + + static_cast(site2.y()); + big_int_type teta = line_a * vec_x + line_b * vec_y; + big_int_type denom = vec_x * line_b - vec_y * line_a; + + big_int_type dif0 = static_cast(site3.point1().y()) - + static_cast(site1.y()); + big_int_type dif1 = static_cast(site1.x()) - + static_cast(site3.point1().x()); + big_int_type A = line_a * dif1 - line_b * dif0; + dif0 = static_cast(site3.point1().y()) - + static_cast(site2.y()); + dif1 = static_cast(site2.x()) - + static_cast(site3.point1().x()); + big_int_type B = line_a * dif1 - line_b * dif0; + big_int_type sum_AB = A + B; + + if (is_zero(denom)) { + big_int_type numer = teta * teta - sum_AB * sum_AB; + big_int_type denom = teta * sum_AB; + cA[0] = denom * sum_x * 2 + numer * vec_x; + cB[0] = segm_len; + cA[1] = denom * sum_AB * 2 + numer * teta; + cB[1] = 1; + cA[2] = denom * sum_y * 2 + numer * vec_y; + fpt_type inv_denom = to_fpt(1.0) / to_fpt(denom); + if (recompute_c_x) + c_event.x(to_fpt(0.25) * to_fpt(cA[0]) * inv_denom); + if (recompute_c_y) + c_event.y(to_fpt(0.25) * to_fpt(cA[2]) * inv_denom); + if (recompute_lower_x) { + c_event.lower_x(to_fpt(0.25) * to_fpt(sqrt_expr_.eval2(cA, cB)) * + inv_denom / get_sqrt(to_fpt(segm_len))); + } + return; + } + + big_int_type det = (teta * teta + denom * denom) * A * B * 4; + fpt_type inv_denom_sqr = to_fpt(1.0) / to_fpt(denom); + inv_denom_sqr *= inv_denom_sqr; + + if (recompute_c_x || recompute_lower_x) { + cA[0] = sum_x * denom * denom + teta * sum_AB * vec_x; + cB[0] = 1; + cA[1] = (segment_index == 2) ? -vec_x : vec_x; + cB[1] = det; + if (recompute_c_x) { + c_event.x(to_fpt(0.5) * to_fpt(sqrt_expr_.eval2(cA, cB)) * + inv_denom_sqr); + } + } + + if (recompute_c_y || recompute_lower_x) { + cA[2] = sum_y * denom * denom + teta * sum_AB * vec_y; + cB[2] = 1; + cA[3] = (segment_index == 2) ? -vec_y : vec_y; + cB[3] = det; + if (recompute_c_y) { + c_event.y(to_fpt(0.5) * to_fpt(sqrt_expr_.eval2(&cA[2], &cB[2])) * + inv_denom_sqr); + } + } + + if (recompute_lower_x) { + cB[0] = cB[0] * segm_len; + cB[1] = cB[1] * segm_len; + cA[2] = sum_AB * (denom * denom + teta * teta); + cB[2] = 1; + cA[3] = (segment_index == 2) ? -teta : teta; + cB[3] = det; + c_event.lower_x(to_fpt(0.5) * to_fpt(sqrt_expr_.eval4(cA, cB)) * + inv_denom_sqr / get_sqrt(to_fpt(segm_len))); + } + } + + // Recompute parameters of the circle event using high-precision library. + void pss(const site_type& site1, + const site_type& site2, + const site_type& site3, + int point_index, + circle_type& c_event, + bool recompute_c_x = true, + bool recompute_c_y = true, + bool recompute_lower_x = true) { + big_int_type a[2], b[2], c[2], cA[4], cB[4]; + const point_type& segm_start1 = site2.point1(true); + const point_type& segm_end1 = site2.point0(true); + const point_type& segm_start2 = site3.point0(true); + const point_type& segm_end2 = site3.point1(true); + a[0] = static_cast(segm_end1.x()) - + static_cast(segm_start1.x()); + b[0] = static_cast(segm_end1.y()) - + static_cast(segm_start1.y()); + a[1] = static_cast(segm_end2.x()) - + static_cast(segm_start2.x()); + b[1] = static_cast(segm_end2.y()) - + static_cast(segm_start2.y()); + big_int_type orientation = a[1] * b[0] - a[0] * b[1]; + if (is_zero(orientation)) { + fpt_type denom = to_fpt(2.0) * to_fpt( + static_cast(a[0] * a[0] + b[0] * b[0])); + c[0] = b[0] * (static_cast(segm_start2.x()) - + static_cast(segm_start1.x())) - + a[0] * (static_cast(segm_start2.y()) - + static_cast(segm_start1.y())); + big_int_type dx = a[0] * (static_cast(site1.y()) - + static_cast(segm_start1.y())) - + b[0] * (static_cast(site1.x()) - + static_cast(segm_start1.x())); + big_int_type dy = b[0] * (static_cast(site1.x()) - + static_cast(segm_start2.x())) - + a[0] * (static_cast(site1.y()) - + static_cast(segm_start2.y())); + cB[0] = dx * dy; + cB[1] = 1; + + if (recompute_c_y) { + cA[0] = b[0] * ((point_index == 2) ? 2 : -2); + cA[1] = a[0] * a[0] * (static_cast(segm_start1.y()) + + static_cast(segm_start2.y())) - + a[0] * b[0] * (static_cast(segm_start1.x()) + + static_cast(segm_start2.x()) - + static_cast(site1.x()) * 2) + + b[0] * b[0] * (static_cast(site1.y()) * 2); + fpt_type c_y = to_fpt(sqrt_expr_.eval2(cA, cB)); + c_event.y(c_y / denom); + } + + if (recompute_c_x || recompute_lower_x) { + cA[0] = a[0] * ((point_index == 2) ? 2 : -2); + cA[1] = b[0] * b[0] * (static_cast(segm_start1.x()) + + static_cast(segm_start2.x())) - + a[0] * b[0] * (static_cast(segm_start1.y()) + + static_cast(segm_start2.y()) - + static_cast(site1.y()) * 2) + + a[0] * a[0] * (static_cast(site1.x()) * 2); + + if (recompute_c_x) { + fpt_type c_x = to_fpt(sqrt_expr_.eval2(cA, cB)); + c_event.x(c_x / denom); + } + + if (recompute_lower_x) { + cA[2] = is_neg(c[0]) ? -c[0] : c[0]; + cB[2] = a[0] * a[0] + b[0] * b[0]; + fpt_type lower_x = to_fpt(sqrt_expr_.eval3(cA, cB)); + c_event.lower_x(lower_x / denom); + } + } + return; + } + c[0] = b[0] * segm_end1.x() - a[0] * segm_end1.y(); + c[1] = a[1] * segm_end2.y() - b[1] * segm_end2.x(); + big_int_type ix = a[0] * c[1] + a[1] * c[0]; + big_int_type iy = b[0] * c[1] + b[1] * c[0]; + big_int_type dx = ix - orientation * site1.x(); + big_int_type dy = iy - orientation * site1.y(); + if (is_zero(dx) && is_zero(dy)) { + fpt_type denom = to_fpt(orientation); + fpt_type c_x = to_fpt(ix) / denom; + fpt_type c_y = to_fpt(iy) / denom; + c_event = circle_type(c_x, c_y, c_x); + return; + } + + big_int_type sign = ((point_index == 2) ? 1 : -1) * + (is_neg(orientation) ? 1 : -1); + cA[0] = a[1] * -dx + b[1] * -dy; + cA[1] = a[0] * -dx + b[0] * -dy; + cA[2] = sign; + cA[3] = 0; + cB[0] = a[0] * a[0] + b[0] * b[0]; + cB[1] = a[1] * a[1] + b[1] * b[1]; + cB[2] = a[0] * a[1] + b[0] * b[1]; + cB[3] = (a[0] * dy - b[0] * dx) * (a[1] * dy - b[1] * dx) * -2; + fpt_type temp = to_fpt( + sqrt_expr_evaluator_pss4(cA, cB)); + fpt_type denom = temp * to_fpt(orientation); + + if (recompute_c_y) { + cA[0] = b[1] * (dx * dx + dy * dy) - iy * (dx * a[1] + dy * b[1]); + cA[1] = b[0] * (dx * dx + dy * dy) - iy * (dx * a[0] + dy * b[0]); + cA[2] = iy * sign; + fpt_type cy = to_fpt( + sqrt_expr_evaluator_pss4(cA, cB)); + c_event.y(cy / denom); + } + + if (recompute_c_x || recompute_lower_x) { + cA[0] = a[1] * (dx * dx + dy * dy) - ix * (dx * a[1] + dy * b[1]); + cA[1] = a[0] * (dx * dx + dy * dy) - ix * (dx * a[0] + dy * b[0]); + cA[2] = ix * sign; + + if (recompute_c_x) { + fpt_type cx = to_fpt( + sqrt_expr_evaluator_pss4(cA, cB)); + c_event.x(cx / denom); + } + + if (recompute_lower_x) { + cA[3] = orientation * (dx * dx + dy * dy) * (is_neg(temp) ? -1 : 1); + fpt_type lower_x = to_fpt( + sqrt_expr_evaluator_pss4(cA, cB)); + c_event.lower_x(lower_x / denom); + } + } + } + + // Recompute parameters of the circle event using high-precision library. + void sss(const site_type& site1, + const site_type& site2, + const site_type& site3, + circle_type& c_event, + bool recompute_c_x = true, + bool recompute_c_y = true, + bool recompute_lower_x = true) { + big_int_type a[3], b[3], c[3], cA[4], cB[4]; + // cA - corresponds to the cross product. + // cB - corresponds to the squared length. + a[0] = static_cast(site1.x1(true)) - + static_cast(site1.x0(true)); + a[1] = static_cast(site2.x1(true)) - + static_cast(site2.x0(true)); + a[2] = static_cast(site3.x1(true)) - + static_cast(site3.x0(true)); + + b[0] = static_cast(site1.y1(true)) - + static_cast(site1.y0(true)); + b[1] = static_cast(site2.y1(true)) - + static_cast(site2.y0(true)); + b[2] = static_cast(site3.y1(true)) - + static_cast(site3.y0(true)); + + c[0] = static_cast(site1.x0(true)) * + static_cast(site1.y1(true)) - + static_cast(site1.y0(true)) * + static_cast(site1.x1(true)); + c[1] = static_cast(site2.x0(true)) * + static_cast(site2.y1(true)) - + static_cast(site2.y0(true)) * + static_cast(site2.x1(true)); + c[2] = static_cast(site3.x0(true)) * + static_cast(site3.y1(true)) - + static_cast(site3.y0(true)) * + static_cast(site3.x1(true)); + + for (int i = 0; i < 3; ++i) + cB[i] = a[i] * a[i] + b[i] * b[i]; + + for (int i = 0; i < 3; ++i) { + int j = (i+1) % 3; + int k = (i+2) % 3; + cA[i] = a[j] * b[k] - a[k] * b[j]; + } + fpt_type denom = to_fpt(sqrt_expr_.eval3(cA, cB)); + + if (recompute_c_y) { + for (int i = 0; i < 3; ++i) { + int j = (i+1) % 3; + int k = (i+2) % 3; + cA[i] = b[j] * c[k] - b[k] * c[j]; + } + fpt_type c_y = to_fpt(sqrt_expr_.eval3(cA, cB)); + c_event.y(c_y / denom); + } + + if (recompute_c_x || recompute_lower_x) { + cA[3] = 0; + for (int i = 0; i < 3; ++i) { + int j = (i+1) % 3; + int k = (i+2) % 3; + cA[i] = a[j] * c[k] - a[k] * c[j]; + if (recompute_lower_x) { + cA[3] = cA[3] + cA[i] * b[i]; + } + } + + if (recompute_c_x) { + fpt_type c_x = to_fpt(sqrt_expr_.eval3(cA, cB)); + c_event.x(c_x / denom); + } + + if (recompute_lower_x) { + cB[3] = 1; + fpt_type lower_x = to_fpt(sqrt_expr_.eval4(cA, cB)); + c_event.lower_x(lower_x / denom); + } + } + } + + private: + // Evaluates A[3] + A[0] * sqrt(B[0]) + A[1] * sqrt(B[1]) + + // A[2] * sqrt(B[3] * (sqrt(B[0] * B[1]) + B[2])). + template + _fpt sqrt_expr_evaluator_pss4(_int *A, _int *B) { + _int cA[4], cB[4]; + if (is_zero(A[3])) { + _fpt lh = sqrt_expr_.eval2(A, B); + cA[0] = 1; + cB[0] = B[0] * B[1]; + cA[1] = B[2]; + cB[1] = 1; + _fpt rh = sqrt_expr_.eval1(A+2, B+3) * + get_sqrt(sqrt_expr_.eval2(cA, cB)); + if ((!is_neg(lh) && !is_neg(rh)) || (!is_pos(lh) && !is_pos(rh))) + return lh + rh; + cA[0] = A[0] * A[0] * B[0] + A[1] * A[1] * B[1] - + A[2] * A[2] * B[3] * B[2]; + cB[0] = 1; + cA[1] = A[0] * A[1] * 2 - A[2] * A[2] * B[3]; + cB[1] = B[0] * B[1]; + _fpt numer = sqrt_expr_.eval2(cA, cB); + return numer / (lh - rh); + } + cA[0] = 1; + cB[0] = B[0] * B[1]; + cA[1] = B[2]; + cB[1] = 1; + _fpt rh = sqrt_expr_.eval1(A+2, B+3) * get_sqrt(sqrt_expr_.eval2(cA, cB)); + cA[0] = A[0]; + cB[0] = B[0]; + cA[1] = A[1]; + cB[1] = B[1]; + cA[2] = A[3]; + cB[2] = 1; + _fpt lh = sqrt_expr_.eval3(cA, cB); + if ((!is_neg(lh) && !is_neg(rh)) || (!is_pos(lh) && !is_pos(rh))) + return lh + rh; + cA[0] = A[3] * A[0] * 2; + cA[1] = A[3] * A[1] * 2; + cA[2] = A[0] * A[0] * B[0] + A[1] * A[1] * B[1] + + A[3] * A[3] - A[2] * A[2] * B[2] * B[3]; + cA[3] = A[0] * A[1] * 2 - A[2] * A[2] * B[3]; + cB[3] = B[0] * B[1]; + _fpt numer = sqrt_expr_evaluator_pss3<_int, _fpt>(cA, cB); + return numer / (lh - rh); + } + + template + // Evaluates A[0] * sqrt(B[0]) + A[1] * sqrt(B[1]) + + // A[2] + A[3] * sqrt(B[0] * B[1]). + // B[3] = B[0] * B[1]. + _fpt sqrt_expr_evaluator_pss3(_int *A, _int *B) { + _int cA[2], cB[2]; + _fpt lh = sqrt_expr_.eval2(A, B); + _fpt rh = sqrt_expr_.eval2(A+2, B+2); + if ((!is_neg(lh) && !is_neg(rh)) || (!is_pos(lh) && !is_pos(rh))) + return lh + rh; + cA[0] = A[0] * A[0] * B[0] + A[1] * A[1] * B[1] - + A[2] * A[2] - A[3] * A[3] * B[0] * B[1]; + cB[0] = 1; + cA[1] = (A[0] * A[1] - A[2] * A[3]) * 2; + cB[1] = B[3]; + _fpt numer = sqrt_expr_.eval2(cA, cB); + return numer / (lh - rh); + } + + robust_sqrt_expr_type sqrt_expr_; + to_fpt_converter to_fpt; + }; + + template + class lazy_circle_formation_functor { + public: + typedef robust_fpt robust_fpt_type; + typedef robust_dif robust_dif_type; + typedef typename Site::point_type point_type; + typedef Site site_type; + typedef Circle circle_type; + typedef mp_circle_formation_functor + exact_circle_formation_functor_type; + + void ppp(const site_type& site1, + const site_type& site2, + const site_type& site3, + circle_type& c_event) { + fpt_type dif_x1 = to_fpt(site1.x()) - to_fpt(site2.x()); + fpt_type dif_x2 = to_fpt(site2.x()) - to_fpt(site3.x()); + fpt_type dif_y1 = to_fpt(site1.y()) - to_fpt(site2.y()); + fpt_type dif_y2 = to_fpt(site2.y()) - to_fpt(site3.y()); + fpt_type orientation = robust_cross_product( + static_cast(site1.x()) - + static_cast(site2.x()), + static_cast(site2.x()) - + static_cast(site3.x()), + static_cast(site1.y()) - + static_cast(site2.y()), + static_cast(site2.y()) - + static_cast(site3.y())); + robust_fpt_type inv_orientation(to_fpt(0.5) / orientation, to_fpt(2.0)); + fpt_type sum_x1 = to_fpt(site1.x()) + to_fpt(site2.x()); + fpt_type sum_x2 = to_fpt(site2.x()) + to_fpt(site3.x()); + fpt_type sum_y1 = to_fpt(site1.y()) + to_fpt(site2.y()); + fpt_type sum_y2 = to_fpt(site2.y()) + to_fpt(site3.y()); + fpt_type dif_x3 = to_fpt(site1.x()) - to_fpt(site3.x()); + fpt_type dif_y3 = to_fpt(site1.y()) - to_fpt(site3.y()); + robust_dif_type c_x, c_y; + c_x += robust_fpt_type(dif_x1 * sum_x1 * dif_y2, to_fpt(2.0)); + c_x += robust_fpt_type(dif_y1 * sum_y1 * dif_y2, to_fpt(2.0)); + c_x -= robust_fpt_type(dif_x2 * sum_x2 * dif_y1, to_fpt(2.0)); + c_x -= robust_fpt_type(dif_y2 * sum_y2 * dif_y1, to_fpt(2.0)); + c_y += robust_fpt_type(dif_x2 * sum_x2 * dif_x1, to_fpt(2.0)); + c_y += robust_fpt_type(dif_y2 * sum_y2 * dif_x1, to_fpt(2.0)); + c_y -= robust_fpt_type(dif_x1 * sum_x1 * dif_x2, to_fpt(2.0)); + c_y -= robust_fpt_type(dif_y1 * sum_y1 * dif_x2, to_fpt(2.0)); + robust_dif_type lower_x(c_x); + lower_x -= robust_fpt_type(get_sqrt( + (dif_x1 * dif_x1 + dif_y1 * dif_y1) * + (dif_x2 * dif_x2 + dif_y2 * dif_y2) * + (dif_x3 * dif_x3 + dif_y3 * dif_y3)), to_fpt(5.0)); + c_event = circle_type( + c_x.dif().fpv() * inv_orientation.fpv(), + c_y.dif().fpv() * inv_orientation.fpv(), + lower_x.dif().fpv() * inv_orientation.fpv()); + bool recompute_c_x = c_x.dif().ulp() > ULPS; + bool recompute_c_y = c_y.dif().ulp() > ULPS; + bool recompute_lower_x = lower_x.dif().ulp() > ULPS; + if (recompute_c_x || recompute_c_y || recompute_lower_x) { + exact_circle_formation_functor_.ppp( + site1, site2, site3, c_event, + recompute_c_x, recompute_c_y, recompute_lower_x); + } + } + + void pps(const site_type& site1, + const site_type& site2, + const site_type& site3, + int segment_index, + circle_type& c_event) { + fpt_type line_a = to_fpt(site3.point1(true).y()) - + to_fpt(site3.point0(true).y()); + fpt_type line_b = to_fpt(site3.point0(true).x()) - + to_fpt(site3.point1(true).x()); + fpt_type vec_x = to_fpt(site2.y()) - to_fpt(site1.y()); + fpt_type vec_y = to_fpt(site1.x()) - to_fpt(site2.x()); + robust_fpt_type teta(robust_cross_product( + static_cast(site3.point1(true).y()) - + static_cast(site3.point0(true).y()), + static_cast(site3.point0(true).x()) - + static_cast(site3.point1(true).x()), + static_cast(site2.x()) - + static_cast(site1.x()), + static_cast(site2.y()) - + static_cast(site1.y())), to_fpt(1.0)); + robust_fpt_type A(robust_cross_product( + static_cast(site3.point1(true).y()) - + static_cast(site3.point0(true).y()), + static_cast(site3.point0(true).x()) - + static_cast(site3.point1(true).x()), + static_cast(site3.point1().y()) - + static_cast(site1.y()), + static_cast(site1.x()) - + static_cast(site3.point1().x())), to_fpt(1.0)); + robust_fpt_type B(robust_cross_product( + static_cast(site3.point1(true).y()) - + static_cast(site3.point0(true).y()), + static_cast(site3.point0(true).x()) - + static_cast(site3.point1(true).x()), + static_cast(site3.point1().y()) - + static_cast(site2.y()), + static_cast(site2.x()) - + static_cast(site3.point1().x())), to_fpt(1.0)); + robust_fpt_type denom(robust_cross_product( + static_cast(site2.y()) - + static_cast(site1.y()), + static_cast(site1.x()) - + static_cast(site2.x()), + static_cast(site3.point1(true).y()) - + static_cast(site3.point0(true).y()), + static_cast(site3.point0(true).x()) - + static_cast(site3.point1(true).x())), to_fpt(1.0)); + robust_fpt_type inv_segm_len(to_fpt(1.0) / + get_sqrt(line_a * line_a + line_b * line_b), to_fpt(3.0)); + robust_dif_type t; + if (ot::eval(denom) == ot::COLLINEAR) { + t += teta / (robust_fpt_type(to_fpt(8.0)) * A); + t -= A / (robust_fpt_type(to_fpt(2.0)) * teta); + } else { + robust_fpt_type det = ((teta * teta + denom * denom) * A * B).sqrt(); + if (segment_index == 2) { + t -= det / (denom * denom); + } else { + t += det / (denom * denom); + } + t += teta * (A + B) / (robust_fpt_type(to_fpt(2.0)) * denom * denom); + } + robust_dif_type c_x, c_y; + c_x += robust_fpt_type(to_fpt(0.5) * (to_fpt(site1.x()) + + to_fpt(site2.x()))); + c_x += robust_fpt_type(vec_x) * t; + c_y += robust_fpt_type(to_fpt(0.5) * (to_fpt(site1.y()) + + to_fpt(site2.y()))); + c_y += robust_fpt_type(vec_y) * t; + robust_dif_type r, lower_x(c_x); + r -= robust_fpt_type(line_a) * robust_fpt_type(site3.x0()); + r -= robust_fpt_type(line_b) * robust_fpt_type(site3.y0()); + r += robust_fpt_type(line_a) * c_x; + r += robust_fpt_type(line_b) * c_y; + if (r.pos().fpv() < r.neg().fpv()) + r = -r; + lower_x += r * inv_segm_len; + c_event = circle_type( + c_x.dif().fpv(), c_y.dif().fpv(), lower_x.dif().fpv()); + bool recompute_c_x = c_x.dif().ulp() > ULPS; + bool recompute_c_y = c_y.dif().ulp() > ULPS; + bool recompute_lower_x = lower_x.dif().ulp() > ULPS; + if (recompute_c_x || recompute_c_y || recompute_lower_x) { + exact_circle_formation_functor_.pps( + site1, site2, site3, segment_index, c_event, + recompute_c_x, recompute_c_y, recompute_lower_x); + } + } + + void pss(const site_type& site1, + const site_type& site2, + const site_type& site3, + int point_index, + circle_type& c_event) { + const point_type& segm_start1 = site2.point1(true); + const point_type& segm_end1 = site2.point0(true); + const point_type& segm_start2 = site3.point0(true); + const point_type& segm_end2 = site3.point1(true); + fpt_type a1 = to_fpt(segm_end1.x()) - to_fpt(segm_start1.x()); + fpt_type b1 = to_fpt(segm_end1.y()) - to_fpt(segm_start1.y()); + fpt_type a2 = to_fpt(segm_end2.x()) - to_fpt(segm_start2.x()); + fpt_type b2 = to_fpt(segm_end2.y()) - to_fpt(segm_start2.y()); + bool recompute_c_x, recompute_c_y, recompute_lower_x; + robust_fpt_type orientation(robust_cross_product( + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(segm_end2.y()) - + static_cast(segm_start2.y()), + static_cast(segm_end2.x()) - + static_cast(segm_start2.x())), to_fpt(1.0)); + if (ot::eval(orientation) == ot::COLLINEAR) { + robust_fpt_type a(a1 * a1 + b1 * b1, to_fpt(2.0)); + robust_fpt_type c(robust_cross_product( + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(segm_start2.y()) - + static_cast(segm_start1.y()), + static_cast(segm_start2.x()) - + static_cast(segm_start1.x())), to_fpt(1.0)); + robust_fpt_type det( + robust_cross_product( + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(site1.x()) - + static_cast(segm_start1.x()), + static_cast(site1.y()) - + static_cast(segm_start1.y())) * + robust_cross_product( + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(site1.y()) - + static_cast(segm_start2.y()), + static_cast(site1.x()) - + static_cast(segm_start2.x())), + to_fpt(3.0)); + robust_dif_type t; + t -= robust_fpt_type(a1) * robust_fpt_type(( + to_fpt(segm_start1.x()) + to_fpt(segm_start2.x())) * to_fpt(0.5) - + to_fpt(site1.x())); + t -= robust_fpt_type(b1) * robust_fpt_type(( + to_fpt(segm_start1.y()) + to_fpt(segm_start2.y())) * to_fpt(0.5) - + to_fpt(site1.y())); + if (point_index == 2) { + t += det.sqrt(); + } else { + t -= det.sqrt(); + } + t /= a; + robust_dif_type c_x, c_y; + c_x += robust_fpt_type(to_fpt(0.5) * ( + to_fpt(segm_start1.x()) + to_fpt(segm_start2.x()))); + c_x += robust_fpt_type(a1) * t; + c_y += robust_fpt_type(to_fpt(0.5) * ( + to_fpt(segm_start1.y()) + to_fpt(segm_start2.y()))); + c_y += robust_fpt_type(b1) * t; + robust_dif_type lower_x(c_x); + if (is_neg(c)) { + lower_x -= robust_fpt_type(to_fpt(0.5)) * c / a.sqrt(); + } else { + lower_x += robust_fpt_type(to_fpt(0.5)) * c / a.sqrt(); + } + recompute_c_x = c_x.dif().ulp() > ULPS; + recompute_c_y = c_y.dif().ulp() > ULPS; + recompute_lower_x = lower_x.dif().ulp() > ULPS; + c_event = + circle_type(c_x.dif().fpv(), c_y.dif().fpv(), lower_x.dif().fpv()); + } else { + robust_fpt_type sqr_sum1(get_sqrt(a1 * a1 + b1 * b1), to_fpt(2.0)); + robust_fpt_type sqr_sum2(get_sqrt(a2 * a2 + b2 * b2), to_fpt(2.0)); + robust_fpt_type a(robust_cross_product( + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(segm_start2.y()) - + static_cast(segm_end2.y()), + static_cast(segm_end2.x()) - + static_cast(segm_start2.x())), to_fpt(1.0)); + if (!is_neg(a)) { + a += sqr_sum1 * sqr_sum2; + } else { + a = (orientation * orientation) / (sqr_sum1 * sqr_sum2 - a); + } + robust_fpt_type or1(robust_cross_product( + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(segm_end1.y()) - + static_cast(site1.y()), + static_cast(segm_end1.x()) - + static_cast(site1.x())), to_fpt(1.0)); + robust_fpt_type or2(robust_cross_product( + static_cast(segm_end2.x()) - + static_cast(segm_start2.x()), + static_cast(segm_end2.y()) - + static_cast(segm_start2.y()), + static_cast(segm_end2.x()) - + static_cast(site1.x()), + static_cast(segm_end2.y()) - + static_cast(site1.y())), to_fpt(1.0)); + robust_fpt_type det = robust_fpt_type(to_fpt(2.0)) * a * or1 * or2; + robust_fpt_type c1(robust_cross_product( + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(segm_end1.y()), + static_cast(segm_end1.x())), to_fpt(1.0)); + robust_fpt_type c2(robust_cross_product( + static_cast(segm_end2.x()) - + static_cast(segm_start2.x()), + static_cast(segm_end2.y()) - + static_cast(segm_start2.y()), + static_cast(segm_end2.x()), + static_cast(segm_end2.y())), to_fpt(1.0)); + robust_fpt_type inv_orientation = + robust_fpt_type(to_fpt(1.0)) / orientation; + robust_dif_type t, b, ix, iy; + ix += robust_fpt_type(a2) * c1 * inv_orientation; + ix += robust_fpt_type(a1) * c2 * inv_orientation; + iy += robust_fpt_type(b1) * c2 * inv_orientation; + iy += robust_fpt_type(b2) * c1 * inv_orientation; + + b += ix * (robust_fpt_type(a1) * sqr_sum2); + b += ix * (robust_fpt_type(a2) * sqr_sum1); + b += iy * (robust_fpt_type(b1) * sqr_sum2); + b += iy * (robust_fpt_type(b2) * sqr_sum1); + b -= sqr_sum1 * robust_fpt_type(robust_cross_product( + static_cast(segm_end2.x()) - + static_cast(segm_start2.x()), + static_cast(segm_end2.y()) - + static_cast(segm_start2.y()), + static_cast(-site1.y()), + static_cast(site1.x())), to_fpt(1.0)); + b -= sqr_sum2 * robust_fpt_type(robust_cross_product( + static_cast(segm_end1.x()) - + static_cast(segm_start1.x()), + static_cast(segm_end1.y()) - + static_cast(segm_start1.y()), + static_cast(-site1.y()), + static_cast(site1.x())), to_fpt(1.0)); + t -= b; + if (point_index == 2) { + t += det.sqrt(); + } else { + t -= det.sqrt(); + } + t /= (a * a); + robust_dif_type c_x(ix), c_y(iy); + c_x += t * (robust_fpt_type(a1) * sqr_sum2); + c_x += t * (robust_fpt_type(a2) * sqr_sum1); + c_y += t * (robust_fpt_type(b1) * sqr_sum2); + c_y += t * (robust_fpt_type(b2) * sqr_sum1); + if (t.pos().fpv() < t.neg().fpv()) { + t = -t; + } + robust_dif_type lower_x(c_x); + if (is_neg(orientation)) { + lower_x -= t * orientation; + } else { + lower_x += t * orientation; + } + recompute_c_x = c_x.dif().ulp() > ULPS; + recompute_c_y = c_y.dif().ulp() > ULPS; + recompute_lower_x = lower_x.dif().ulp() > ULPS; + c_event = circle_type( + c_x.dif().fpv(), c_y.dif().fpv(), lower_x.dif().fpv()); + } + if (recompute_c_x || recompute_c_y || recompute_lower_x) { + exact_circle_formation_functor_.pss( + site1, site2, site3, point_index, c_event, + recompute_c_x, recompute_c_y, recompute_lower_x); + } + } + + void sss(const site_type& site1, + const site_type& site2, + const site_type& site3, + circle_type& c_event) { + robust_fpt_type a1(to_fpt(site1.x1(true)) - to_fpt(site1.x0(true))); + robust_fpt_type b1(to_fpt(site1.y1(true)) - to_fpt(site1.y0(true))); + robust_fpt_type c1(robust_cross_product( + site1.x0(true), site1.y0(true), + site1.x1(true), site1.y1(true)), to_fpt(1.0)); + + robust_fpt_type a2(to_fpt(site2.x1(true)) - to_fpt(site2.x0(true))); + robust_fpt_type b2(to_fpt(site2.y1(true)) - to_fpt(site2.y0(true))); + robust_fpt_type c2(robust_cross_product( + site2.x0(true), site2.y0(true), + site2.x1(true), site2.y1(true)), to_fpt(1.0)); + + robust_fpt_type a3(to_fpt(site3.x1(true)) - to_fpt(site3.x0(true))); + robust_fpt_type b3(to_fpt(site3.y1(true)) - to_fpt(site3.y0(true))); + robust_fpt_type c3(robust_cross_product( + site3.x0(true), site3.y0(true), + site3.x1(true), site3.y1(true)), to_fpt(1.0)); + + robust_fpt_type len1 = (a1 * a1 + b1 * b1).sqrt(); + robust_fpt_type len2 = (a2 * a2 + b2 * b2).sqrt(); + robust_fpt_type len3 = (a3 * a3 + b3 * b3).sqrt(); + robust_fpt_type cross_12(robust_cross_product( + static_cast(site1.x1(true)) - + static_cast(site1.x0(true)), + static_cast(site1.y1(true)) - + static_cast(site1.y0(true)), + static_cast(site2.x1(true)) - + static_cast(site2.x0(true)), + static_cast(site2.y1(true)) - + static_cast(site2.y0(true))), to_fpt(1.0)); + robust_fpt_type cross_23(robust_cross_product( + static_cast(site2.x1(true)) - + static_cast(site2.x0(true)), + static_cast(site2.y1(true)) - + static_cast(site2.y0(true)), + static_cast(site3.x1(true)) - + static_cast(site3.x0(true)), + static_cast(site3.y1(true)) - + static_cast(site3.y0(true))), to_fpt(1.0)); + robust_fpt_type cross_31(robust_cross_product( + static_cast(site3.x1(true)) - + static_cast(site3.x0(true)), + static_cast(site3.y1(true)) - + static_cast(site3.y0(true)), + static_cast(site1.x1(true)) - + static_cast(site1.x0(true)), + static_cast(site1.y1(true)) - + static_cast(site1.y0(true))), to_fpt(1.0)); + + // denom = cross_12 * len3 + cross_23 * len1 + cross_31 * len2. + robust_dif_type denom; + denom += cross_12 * len3; + denom += cross_23 * len1; + denom += cross_31 * len2; + + // denom * r = (b2 * c_x - a2 * c_y - c2 * denom) / len2. + robust_dif_type r; + r -= cross_12 * c3; + r -= cross_23 * c1; + r -= cross_31 * c2; + + robust_dif_type c_x; + c_x += a1 * c2 * len3; + c_x -= a2 * c1 * len3; + c_x += a2 * c3 * len1; + c_x -= a3 * c2 * len1; + c_x += a3 * c1 * len2; + c_x -= a1 * c3 * len2; + + robust_dif_type c_y; + c_y += b1 * c2 * len3; + c_y -= b2 * c1 * len3; + c_y += b2 * c3 * len1; + c_y -= b3 * c2 * len1; + c_y += b3 * c1 * len2; + c_y -= b1 * c3 * len2; + + robust_dif_type lower_x = c_x + r; + + robust_fpt_type denom_dif = denom.dif(); + robust_fpt_type c_x_dif = c_x.dif() / denom_dif; + robust_fpt_type c_y_dif = c_y.dif() / denom_dif; + robust_fpt_type lower_x_dif = lower_x.dif() / denom_dif; + + bool recompute_c_x = c_x_dif.ulp() > ULPS; + bool recompute_c_y = c_y_dif.ulp() > ULPS; + bool recompute_lower_x = lower_x_dif.ulp() > ULPS; + c_event = circle_type(c_x_dif.fpv(), c_y_dif.fpv(), lower_x_dif.fpv()); + if (recompute_c_x || recompute_c_y || recompute_lower_x) { + exact_circle_formation_functor_.sss( + site1, site2, site3, c_event, + recompute_c_x, recompute_c_y, recompute_lower_x); + } + } + + private: + exact_circle_formation_functor_type exact_circle_formation_functor_; + to_fpt_converter to_fpt; + }; + + template , + typename CFF = lazy_circle_formation_functor > + class circle_formation_predicate { + public: + typedef Site site_type; + typedef Circle circle_type; + typedef CEP circle_existence_predicate_type; + typedef CFF circle_formation_functor_type; + + // Create a circle event from the given three sites. + // Returns true if the circle event exists, else false. + // If exists circle event is saved into the c_event variable. + bool operator()(const site_type& site1, const site_type& site2, + const site_type& site3, circle_type& circle) { + if (!site1.is_segment()) { + if (!site2.is_segment()) { + if (!site3.is_segment()) { + // (point, point, point) sites. + if (!circle_existence_predicate_.ppp(site1, site2, site3)) + return false; + circle_formation_functor_.ppp(site1, site2, site3, circle); + } else { + // (point, point, segment) sites. + if (!circle_existence_predicate_.pps(site1, site2, site3, 3)) + return false; + circle_formation_functor_.pps(site1, site2, site3, 3, circle); + } + } else { + if (!site3.is_segment()) { + // (point, segment, point) sites. + if (!circle_existence_predicate_.pps(site1, site3, site2, 2)) + return false; + circle_formation_functor_.pps(site1, site3, site2, 2, circle); + } else { + // (point, segment, segment) sites. + if (!circle_existence_predicate_.pss(site1, site2, site3, 1)) + return false; + circle_formation_functor_.pss(site1, site2, site3, 1, circle); + } + } + } else { + if (!site2.is_segment()) { + if (!site3.is_segment()) { + // (segment, point, point) sites. + if (!circle_existence_predicate_.pps(site2, site3, site1, 1)) + return false; + circle_formation_functor_.pps(site2, site3, site1, 1, circle); + } else { + // (segment, point, segment) sites. + if (!circle_existence_predicate_.pss(site2, site1, site3, 2)) + return false; + circle_formation_functor_.pss(site2, site1, site3, 2, circle); + } + } else { + if (!site3.is_segment()) { + // (segment, segment, point) sites. + if (!circle_existence_predicate_.pss(site3, site1, site2, 3)) + return false; + circle_formation_functor_.pss(site3, site1, site2, 3, circle); + } else { + // (segment, segment, segment) sites. + if (!circle_existence_predicate_.sss(site1, site2, site3)) + return false; + circle_formation_functor_.sss(site1, site2, site3, circle); + } + } + } + return true; + } + + private: + circle_existence_predicate_type circle_existence_predicate_; + circle_formation_functor_type circle_formation_functor_; + }; +}; +} // detail +} // polygon +} // boost + +#endif // BOOST_POLYGON_DETAIL_VORONOI_PREDICATES diff --git a/3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp b/3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp new file mode 100644 index 0000000000..01d337fdf0 --- /dev/null +++ b/3party/boost/boost/polygon/detail/voronoi_robust_fpt.hpp @@ -0,0 +1,506 @@ +// Boost.Polygon library detail/voronoi_robust_fpt.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_DETAIL_VORONOI_ROBUST_FPT +#define BOOST_POLYGON_DETAIL_VORONOI_ROBUST_FPT + +#include + +// Geometry predicates with floating-point variables usually require +// high-precision predicates to retrieve the correct result. +// Epsilon robust predicates give the result within some epsilon relative +// error, but are a lot faster than high-precision predicates. +// To make algorithm robust and efficient epsilon robust predicates are +// used at the first step. In case of the undefined result high-precision +// arithmetic is used to produce required robustness. This approach +// requires exact computation of epsilon intervals within which epsilon +// robust predicates have undefined value. +// There are two ways to measure an error of floating-point calculations: +// relative error and ULPs (units in the last place). +// Let EPS be machine epsilon, then next inequalities have place: +// 1 EPS <= 1 ULP <= 2 EPS (1), 0.5 ULP <= 1 EPS <= 1 ULP (2). +// ULPs are good for measuring rounding errors and comparing values. +// Relative errors are good for computation of general relative +// error of formulas or expressions. So to calculate epsilon +// interval within which epsilon robust predicates have undefined result +// next schema is used: +// 1) Compute rounding errors of initial variables using ULPs; +// 2) Transform ULPs to epsilons using upper bound of the (1); +// 3) Compute relative error of the formula using epsilon arithmetic; +// 4) Transform epsilon to ULPs using upper bound of the (2); +// In case two values are inside undefined ULP range use high-precision +// arithmetic to produce the correct result, else output the result. +// Look at almost_equal function to see how two floating-point variables +// are checked to fit in the ULP range. +// If A has relative error of r(A) and B has relative error of r(B) then: +// 1) r(A + B) <= max(r(A), r(B)), for A * B >= 0; +// 2) r(A - B) <= B*r(A)+A*r(B)/(A-B), for A * B >= 0; +// 2) r(A * B) <= r(A) + r(B); +// 3) r(A / B) <= r(A) + r(B); +// In addition rounding error should be added, that is always equal to +// 0.5 ULP or at most 1 epsilon. As you might see from the above formulas +// subtraction relative error may be extremely large, that's why +// epsilon robust comparator class is used to store floating point values +// and compute subtraction as the final step of the evaluation. +// For further information about relative errors and ULPs try this link: +// http://docs.sun.com/source/806-3568/ncg_goldberg.html + +namespace boost { +namespace polygon { +namespace detail { + +template +T get_sqrt(const T& that) { + return (std::sqrt)(that); +} + +template +bool is_pos(const T& that) { + return that > 0; +} + +template +bool is_neg(const T& that) { + return that < 0; +} + +template +bool is_zero(const T& that) { + return that == 0; +} + +template +class robust_fpt { + public: + typedef _fpt floating_point_type; + typedef _fpt relative_error_type; + + // Rounding error is at most 1 EPS. + enum { + ROUNDING_ERROR = 1 + }; + + robust_fpt() : fpv_(0.0), re_(0.0) {} + explicit robust_fpt(floating_point_type fpv) : + fpv_(fpv), re_(0.0) {} + robust_fpt(floating_point_type fpv, relative_error_type error) : + fpv_(fpv), re_(error) {} + + floating_point_type fpv() const { return fpv_; } + relative_error_type re() const { return re_; } + relative_error_type ulp() const { return re_; } + + robust_fpt& operator=(const robust_fpt& that) { + this->fpv_ = that.fpv_; + this->re_ = that.re_; + return *this; + } + + bool has_pos_value() const { + return is_pos(fpv_); + } + + bool has_neg_value() const { + return is_neg(fpv_); + } + + bool has_zero_value() const { + return is_zero(fpv_); + } + + robust_fpt operator-() const { + return robust_fpt(-fpv_, re_); + } + + robust_fpt& operator+=(const robust_fpt& that) { + floating_point_type fpv = this->fpv_ + that.fpv_; + if ((!is_neg(this->fpv_) && !is_neg(that.fpv_)) || + (!is_pos(this->fpv_) && !is_pos(that.fpv_))) { + this->re_ = (std::max)(this->re_, that.re_) + ROUNDING_ERROR; + } else { + floating_point_type temp = + (this->fpv_ * this->re_ - that.fpv_ * that.re_) / fpv; + if (is_neg(temp)) + temp = -temp; + this->re_ = temp + ROUNDING_ERROR; + } + this->fpv_ = fpv; + return *this; + } + + robust_fpt& operator-=(const robust_fpt& that) { + floating_point_type fpv = this->fpv_ - that.fpv_; + if ((!is_neg(this->fpv_) && !is_pos(that.fpv_)) || + (!is_pos(this->fpv_) && !is_neg(that.fpv_))) { + this->re_ = (std::max)(this->re_, that.re_) + ROUNDING_ERROR; + } else { + floating_point_type temp = + (this->fpv_ * this->re_ + that.fpv_ * that.re_) / fpv; + if (is_neg(temp)) + temp = -temp; + this->re_ = temp + ROUNDING_ERROR; + } + this->fpv_ = fpv; + return *this; + } + + robust_fpt& operator*=(const robust_fpt& that) { + this->re_ += that.re_ + ROUNDING_ERROR; + this->fpv_ *= that.fpv_; + return *this; + } + + robust_fpt& operator/=(const robust_fpt& that) { + this->re_ += that.re_ + ROUNDING_ERROR; + this->fpv_ /= that.fpv_; + return *this; + } + + robust_fpt operator+(const robust_fpt& that) const { + floating_point_type fpv = this->fpv_ + that.fpv_; + relative_error_type re; + if ((!is_neg(this->fpv_) && !is_neg(that.fpv_)) || + (!is_pos(this->fpv_) && !is_pos(that.fpv_))) { + re = (std::max)(this->re_, that.re_) + ROUNDING_ERROR; + } else { + floating_point_type temp = + (this->fpv_ * this->re_ - that.fpv_ * that.re_) / fpv; + if (is_neg(temp)) + temp = -temp; + re = temp + ROUNDING_ERROR; + } + return robust_fpt(fpv, re); + } + + robust_fpt operator-(const robust_fpt& that) const { + floating_point_type fpv = this->fpv_ - that.fpv_; + relative_error_type re; + if ((!is_neg(this->fpv_) && !is_pos(that.fpv_)) || + (!is_pos(this->fpv_) && !is_neg(that.fpv_))) { + re = (std::max)(this->re_, that.re_) + ROUNDING_ERROR; + } else { + floating_point_type temp = + (this->fpv_ * this->re_ + that.fpv_ * that.re_) / fpv; + if (is_neg(temp)) + temp = -temp; + re = temp + ROUNDING_ERROR; + } + return robust_fpt(fpv, re); + } + + robust_fpt operator*(const robust_fpt& that) const { + floating_point_type fpv = this->fpv_ * that.fpv_; + relative_error_type re = this->re_ + that.re_ + ROUNDING_ERROR; + return robust_fpt(fpv, re); + } + + robust_fpt operator/(const robust_fpt& that) const { + floating_point_type fpv = this->fpv_ / that.fpv_; + relative_error_type re = this->re_ + that.re_ + ROUNDING_ERROR; + return robust_fpt(fpv, re); + } + + robust_fpt sqrt() const { + return robust_fpt(get_sqrt(fpv_), + re_ * static_cast(0.5) + + ROUNDING_ERROR); + } + + private: + floating_point_type fpv_; + relative_error_type re_; +}; + +template +robust_fpt get_sqrt(const robust_fpt& that) { + return that.sqrt(); +} + +template +bool is_pos(const robust_fpt& that) { + return that.has_pos_value(); +} + +template +bool is_neg(const robust_fpt& that) { + return that.has_neg_value(); +} + +template +bool is_zero(const robust_fpt& that) { + return that.has_zero_value(); +} + +// robust_dif consists of two not negative values: value1 and value2. +// The resulting expression is equal to the value1 - value2. +// Subtraction of a positive value is equivalent to the addition to value2 +// and subtraction of a negative value is equivalent to the addition to +// value1. The structure implicitly avoids difference computation. +template +class robust_dif { + public: + robust_dif() : + positive_sum_(0), + negative_sum_(0) {} + + explicit robust_dif(const T& value) : + positive_sum_((value > 0)?value:0), + negative_sum_((value < 0)?-value:0) {} + + robust_dif(const T& pos, const T& neg) : + positive_sum_(pos), + negative_sum_(neg) {} + + T dif() const { + return positive_sum_ - negative_sum_; + } + + T pos() const { + return positive_sum_; + } + + T neg() const { + return negative_sum_; + } + + robust_dif operator-() const { + return robust_dif(negative_sum_, positive_sum_); + } + + robust_dif& operator+=(const T& val) { + if (!is_neg(val)) + positive_sum_ += val; + else + negative_sum_ -= val; + return *this; + } + + robust_dif& operator+=(const robust_dif& that) { + positive_sum_ += that.positive_sum_; + negative_sum_ += that.negative_sum_; + return *this; + } + + robust_dif& operator-=(const T& val) { + if (!is_neg(val)) + negative_sum_ += val; + else + positive_sum_ -= val; + return *this; + } + + robust_dif& operator-=(const robust_dif& that) { + positive_sum_ += that.negative_sum_; + negative_sum_ += that.positive_sum_; + return *this; + } + + robust_dif& operator*=(const T& val) { + if (!is_neg(val)) { + positive_sum_ *= val; + negative_sum_ *= val; + } else { + positive_sum_ *= -val; + negative_sum_ *= -val; + swap(); + } + return *this; + } + + robust_dif& operator*=(const robust_dif& that) { + T positive_sum = this->positive_sum_ * that.positive_sum_ + + this->negative_sum_ * that.negative_sum_; + T negative_sum = this->positive_sum_ * that.negative_sum_ + + this->negative_sum_ * that.positive_sum_; + positive_sum_ = positive_sum; + negative_sum_ = negative_sum; + return *this; + } + + robust_dif& operator/=(const T& val) { + if (!is_neg(val)) { + positive_sum_ /= val; + negative_sum_ /= val; + } else { + positive_sum_ /= -val; + negative_sum_ /= -val; + swap(); + } + return *this; + } + + private: + void swap() { + (std::swap)(positive_sum_, negative_sum_); + } + + T positive_sum_; + T negative_sum_; +}; + +template +robust_dif operator+(const robust_dif& lhs, + const robust_dif& rhs) { + return robust_dif(lhs.pos() + rhs.pos(), lhs.neg() + rhs.neg()); +} + +template +robust_dif operator+(const robust_dif& lhs, const T& rhs) { + if (!is_neg(rhs)) { + return robust_dif(lhs.pos() + rhs, lhs.neg()); + } else { + return robust_dif(lhs.pos(), lhs.neg() - rhs); + } +} + +template +robust_dif operator+(const T& lhs, const robust_dif& rhs) { + if (!is_neg(lhs)) { + return robust_dif(lhs + rhs.pos(), rhs.neg()); + } else { + return robust_dif(rhs.pos(), rhs.neg() - lhs); + } +} + +template +robust_dif operator-(const robust_dif& lhs, + const robust_dif& rhs) { + return robust_dif(lhs.pos() + rhs.neg(), lhs.neg() + rhs.pos()); +} + +template +robust_dif operator-(const robust_dif& lhs, const T& rhs) { + if (!is_neg(rhs)) { + return robust_dif(lhs.pos(), lhs.neg() + rhs); + } else { + return robust_dif(lhs.pos() - rhs, lhs.neg()); + } +} + +template +robust_dif operator-(const T& lhs, const robust_dif& rhs) { + if (!is_neg(lhs)) { + return robust_dif(lhs + rhs.neg(), rhs.pos()); + } else { + return robust_dif(rhs.neg(), rhs.pos() - lhs); + } +} + +template +robust_dif operator*(const robust_dif& lhs, + const robust_dif& rhs) { + T res_pos = lhs.pos() * rhs.pos() + lhs.neg() * rhs.neg(); + T res_neg = lhs.pos() * rhs.neg() + lhs.neg() * rhs.pos(); + return robust_dif(res_pos, res_neg); +} + +template +robust_dif operator*(const robust_dif& lhs, const T& val) { + if (!is_neg(val)) { + return robust_dif(lhs.pos() * val, lhs.neg() * val); + } else { + return robust_dif(-lhs.neg() * val, -lhs.pos() * val); + } +} + +template +robust_dif operator*(const T& val, const robust_dif& rhs) { + if (!is_neg(val)) { + return robust_dif(val * rhs.pos(), val * rhs.neg()); + } else { + return robust_dif(-val * rhs.neg(), -val * rhs.pos()); + } +} + +template +robust_dif operator/(const robust_dif& lhs, const T& val) { + if (!is_neg(val)) { + return robust_dif(lhs.pos() / val, lhs.neg() / val); + } else { + return robust_dif(-lhs.neg() / val, -lhs.pos() / val); + } +} + +// Used to compute expressions that operate with sqrts with predefined +// relative error. Evaluates expressions of the next type: +// sum(i = 1 .. n)(A[i] * sqrt(B[i])), 1 <= n <= 4. +template +class robust_sqrt_expr { + public: + enum MAX_RELATIVE_ERROR { + MAX_RELATIVE_ERROR_EVAL1 = 4, + MAX_RELATIVE_ERROR_EVAL2 = 7, + MAX_RELATIVE_ERROR_EVAL3 = 16, + MAX_RELATIVE_ERROR_EVAL4 = 25 + }; + + // Evaluates expression (re = 4 EPS): + // A[0] * sqrt(B[0]). + _fpt eval1(_int* A, _int* B) { + _fpt a = convert(A[0]); + _fpt b = convert(B[0]); + return a * get_sqrt(b); + } + + // Evaluates expression (re = 7 EPS): + // A[0] * sqrt(B[0]) + A[1] * sqrt(B[1]). + _fpt eval2(_int* A, _int* B) { + _fpt a = eval1(A, B); + _fpt b = eval1(A + 1, B + 1); + if ((!is_neg(a) && !is_neg(b)) || + (!is_pos(a) && !is_pos(b))) + return a + b; + return convert(A[0] * A[0] * B[0] - A[1] * A[1] * B[1]) / (a - b); + } + + // Evaluates expression (re = 16 EPS): + // A[0] * sqrt(B[0]) + A[1] * sqrt(B[1]) + A[2] * sqrt(B[2]). + _fpt eval3(_int* A, _int* B) { + _fpt a = eval2(A, B); + _fpt b = eval1(A + 2, B + 2); + if ((!is_neg(a) && !is_neg(b)) || + (!is_pos(a) && !is_pos(b))) + return a + b; + tA[3] = A[0] * A[0] * B[0] + A[1] * A[1] * B[1] - A[2] * A[2] * B[2]; + tB[3] = 1; + tA[4] = A[0] * A[1] * 2; + tB[4] = B[0] * B[1]; + return eval2(tA + 3, tB + 3) / (a - b); + } + + + // Evaluates expression (re = 25 EPS): + // A[0] * sqrt(B[0]) + A[1] * sqrt(B[1]) + + // A[2] * sqrt(B[2]) + A[3] * sqrt(B[3]). + _fpt eval4(_int* A, _int* B) { + _fpt a = eval2(A, B); + _fpt b = eval2(A + 2, B + 2); + if ((!is_neg(a) && !is_neg(b)) || + (!is_pos(a) && !is_pos(b))) + return a + b; + tA[0] = A[0] * A[0] * B[0] + A[1] * A[1] * B[1] - + A[2] * A[2] * B[2] - A[3] * A[3] * B[3]; + tB[0] = 1; + tA[1] = A[0] * A[1] * 2; + tB[1] = B[0] * B[1]; + tA[2] = A[2] * A[3] * -2; + tB[2] = B[2] * B[3]; + return eval3(tA, tB) / (a - b); + } + + private: + _int tA[5]; + _int tB[5]; + _converter convert; +}; +} // detail +} // polygon +} // boost + +#endif // BOOST_POLYGON_DETAIL_VORONOI_ROBUST_FPT diff --git a/3party/boost/boost/polygon/detail/voronoi_structures.hpp b/3party/boost/boost/polygon/detail/voronoi_structures.hpp new file mode 100644 index 0000000000..532eb7e253 --- /dev/null +++ b/3party/boost/boost/polygon/detail/voronoi_structures.hpp @@ -0,0 +1,461 @@ +// Boost.Polygon library detail/voronoi_structures.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_DETAIL_VORONOI_STRUCTURES +#define BOOST_POLYGON_DETAIL_VORONOI_STRUCTURES + +#include +#include +#include + +#include "boost/polygon/voronoi_geometry_type.hpp" + +namespace boost { +namespace polygon { +namespace detail { +// Cartesian 2D point data structure. +template +class point_2d { + public: + typedef T coordinate_type; + + point_2d() {} + + point_2d(coordinate_type x, coordinate_type y) : + x_(x), + y_(y) {} + + bool operator==(const point_2d& that) const { + return (this->x_ == that.x()) && (this->y_ == that.y()); + } + + bool operator!=(const point_2d& that) const { + return (this->x_ != that.x()) || (this->y_ != that.y()); + } + + coordinate_type x() const { + return x_; + } + + coordinate_type y() const { + return y_; + } + + point_2d& x(coordinate_type x) { + x_ = x; + return *this; + } + + point_2d& y(coordinate_type y) { + y_ = y; + return *this; + } + + private: + coordinate_type x_; + coordinate_type y_; +}; + +// Site event type. +// Occurs when the sweepline sweeps over one of the initial sites: +// 1) point site +// 2) start-point of the segment site +// 3) endpoint of the segment site +// Implicit segment direction is defined: the start-point of +// the segment compares less than its endpoint. +// Each input segment is divided onto two site events: +// 1) One going from the start-point to the endpoint +// (is_inverse() = false) +// 2) Another going from the endpoint to the start-point +// (is_inverse() = true) +// In beach line data structure segment sites of the first +// type precede sites of the second type for the same segment. +// Members: +// point0_ - point site or segment's start-point +// point1_ - segment's endpoint if site is a segment +// sorted_index_ - the last bit encodes information if the site is inverse; +// the other bits encode site event index among the sorted site events +// initial_index_ - site index among the initial input set +// Note: for all sites is_inverse_ flag is equal to false by default. +template +class site_event { + public: + typedef T coordinate_type; + typedef point_2d point_type; + + site_event() : + point0_(0, 0), + point1_(0, 0), + sorted_index_(0), + flags_(0) {} + + site_event(coordinate_type x, coordinate_type y) : + point0_(x, y), + point1_(x, y), + sorted_index_(0), + flags_(0) {} + + explicit site_event(const point_type& point) : + point0_(point), + point1_(point), + sorted_index_(0), + flags_(0) {} + + site_event(coordinate_type x1, coordinate_type y1, + coordinate_type x2, coordinate_type y2): + point0_(x1, y1), + point1_(x2, y2), + sorted_index_(0), + flags_(0) {} + + site_event(const point_type& point1, const point_type& point2) : + point0_(point1), + point1_(point2), + sorted_index_(0), + flags_(0) {} + + bool operator==(const site_event& that) const { + return (this->point0_ == that.point0_) && + (this->point1_ == that.point1_); + } + + bool operator!=(const site_event& that) const { + return (this->point0_ != that.point0_) || + (this->point1_ != that.point1_); + } + + coordinate_type x(bool oriented = false) const { + return x0(oriented); + } + + coordinate_type y(bool oriented = false) const { + return y0(oriented); + } + + coordinate_type x0(bool oriented = false) const { + if (!oriented) + return point0_.x(); + return is_inverse() ? point1_.x() : point0_.x(); + } + + coordinate_type y0(bool oriented = false) const { + if (!oriented) + return point0_.y(); + return is_inverse() ? point1_.y() : point0_.y(); + } + + coordinate_type x1(bool oriented = false) const { + if (!oriented) + return point1_.x(); + return is_inverse() ? point0_.x() : point1_.x(); + } + + coordinate_type y1(bool oriented = false) const { + if (!oriented) + return point1_.y(); + return is_inverse() ? point0_.y() : point1_.y(); + } + + const point_type& point0(bool oriented = false) const { + if (!oriented) + return point0_; + return is_inverse() ? point1_ : point0_; + } + + const point_type& point1(bool oriented = false) const { + if (!oriented) + return point1_; + return is_inverse() ? point0_ : point1_; + } + + std::size_t sorted_index() const { + return sorted_index_; + } + + site_event& sorted_index(std::size_t index) { + sorted_index_ = index; + return *this; + } + + std::size_t initial_index() const { + return initial_index_; + } + + site_event& initial_index(std::size_t index) { + initial_index_ = index; + return *this; + } + + bool is_inverse() const { + return (flags_ & IS_INVERSE) ? true : false; + } + + site_event& inverse() { + flags_ ^= IS_INVERSE; + return *this; + } + + SourceCategory source_category() const { + return static_cast(flags_ & SOURCE_CATEGORY_BITMASK); + } + + site_event& source_category(SourceCategory source_category) { + flags_ |= source_category; + return *this; + } + + bool is_point() const { + return (point0_.x() == point1_.x()) && (point0_.y() == point1_.y()); + } + + bool is_segment() const { + return (point0_.x() != point1_.x()) || (point0_.y() != point1_.y()); + } + + private: + enum Bits { + IS_INVERSE = 0x20 // 32 + }; + + point_type point0_; + point_type point1_; + std::size_t sorted_index_; + std::size_t initial_index_; + std::size_t flags_; +}; + +// Circle event type. +// Occurs when the sweepline sweeps over the rightmost point of the Voronoi +// circle (with the center at the intersection point of the bisectors). +// Circle event is made of the two consecutive nodes in the beach line data +// structure. In case another node was inserted during algorithm execution +// between the given two nodes circle event becomes inactive. +// Variables: +// center_x_ - center x-coordinate; +// center_y_ - center y-coordinate; +// lower_x_ - leftmost x-coordinate; +// is_active_ - states whether circle event is still active. +// NOTE: lower_y coordinate is always equal to center_y. +template +class circle_event { + public: + typedef T coordinate_type; + + circle_event() : is_active_(true) {} + + circle_event(coordinate_type c_x, + coordinate_type c_y, + coordinate_type lower_x) : + center_x_(c_x), + center_y_(c_y), + lower_x_(lower_x), + is_active_(true) {} + + coordinate_type x() const { + return center_x_; + } + + circle_event& x(coordinate_type center_x) { + center_x_ = center_x; + return *this; + } + + coordinate_type y() const { + return center_y_; + } + + circle_event& y(coordinate_type center_y) { + center_y_ = center_y; + return *this; + } + + coordinate_type lower_x() const { + return lower_x_; + } + + circle_event& lower_x(coordinate_type lower_x) { + lower_x_ = lower_x; + return *this; + } + + coordinate_type lower_y() const { + return center_y_; + } + + bool is_active() const { + return is_active_; + } + + circle_event& deactivate() { + is_active_ = false; + return *this; + } + + private: + coordinate_type center_x_; + coordinate_type center_y_; + coordinate_type lower_x_; + bool is_active_; +}; + +// Event queue data structure, holds circle events. +// During algorithm run, some of the circle events disappear (become +// inactive). Priority queue data structure doesn't support +// iterators (there is no direct ability to modify its elements). +// Instead list is used to store all the circle events and priority queue +// of the iterators to the list elements is used to keep the correct circle +// events ordering. +template +class ordered_queue { + public: + ordered_queue() {} + + bool empty() const { + return c_.empty(); + } + + const T &top() const { + return *c_.top(); + } + + void pop() { + list_iterator_type it = c_.top(); + c_.pop(); + c_list_.erase(it); + } + + T &push(const T &e) { + c_list_.push_front(e); + c_.push(c_list_.begin()); + return c_list_.front(); + } + + void clear() { + while (!c_.empty()) + c_.pop(); + c_list_.clear(); + } + + private: + typedef typename std::list::iterator list_iterator_type; + + struct comparison { + bool operator() (const list_iterator_type &it1, + const list_iterator_type &it2) const { + return cmp_(*it1, *it2); + } + Predicate cmp_; + }; + + std::priority_queue< list_iterator_type, + std::vector, + comparison > c_; + std::list c_list_; + + // Disallow copy constructor and operator= + ordered_queue(const ordered_queue&); + void operator=(const ordered_queue&); +}; + +// Represents a bisector node made by two arcs that correspond to the left +// and right sites. Arc is defined as a curve with points equidistant from +// the site and from the sweepline. If the site is a point then arc is +// a parabola, otherwise it's a line segment. A segment site event will +// produce different bisectors based on its direction. +// In general case two sites will create two opposite bisectors. That's +// why the order of the sites is important to define the unique bisector. +// The one site is considered to be newer than the other one if it was +// processed by the algorithm later (has greater index). +template +class beach_line_node_key { + public: + typedef Site site_type; + + // Constructs degenerate bisector, used to search an arc that is above + // the given site. The input to the constructor is the new site point. + explicit beach_line_node_key(const site_type &new_site) : + left_site_(new_site), + right_site_(new_site) {} + + // Constructs a new bisector. The input to the constructor is the two + // sites that create the bisector. The order of sites is important. + beach_line_node_key(const site_type &left_site, + const site_type &right_site) : + left_site_(left_site), + right_site_(right_site) {} + + const site_type &left_site() const { + return left_site_; + } + + site_type &left_site() { + return left_site_; + } + + beach_line_node_key& left_site(const site_type &site) { + left_site_ = site; + return *this; + } + + const site_type &right_site() const { + return right_site_; + } + + site_type &right_site() { + return right_site_; + } + + beach_line_node_key& right_site(const site_type &site) { + right_site_ = site; + return *this; + } + + private: + site_type left_site_; + site_type right_site_; +}; + +// Represents edge data structure from the Voronoi output, that is +// associated as a value with beach line bisector in the beach +// line. Contains pointer to the circle event in the circle event +// queue if the edge corresponds to the right bisector of the circle event. +template +class beach_line_node_data { + public: + explicit beach_line_node_data(Edge* new_edge) : + circle_event_(NULL), + edge_(new_edge) {} + + Circle* circle_event() const { + return circle_event_; + } + + beach_line_node_data& circle_event(Circle* circle_event) { + circle_event_ = circle_event; + return *this; + } + + Edge* edge() const { + return edge_; + } + + beach_line_node_data& edge(Edge* new_edge) { + edge_ = new_edge; + return *this; + } + + private: + Circle* circle_event_; + Edge* edge_; +}; +} // detail +} // polygon +} // boost + +#endif // BOOST_POLYGON_DETAIL_VORONOI_STRUCTURES diff --git a/3party/boost/boost/polygon/gmp_override.hpp b/3party/boost/boost/polygon/gmp_override.hpp index 16cc96fc0a..322e05d02d 100644 --- a/3party/boost/boost/polygon/gmp_override.hpp +++ b/3party/boost/boost/polygon/gmp_override.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -25,14 +25,14 @@ namespace boost { namespace polygon { v_ = that; return (*this); } - inline operator int() const { + inline operator int() const { std::cout << "cast\n"; mpz_class num = v_.get_num(); mpz_class den = v_.get_den(); num /= den; - return num.get_si(); + return num.get_si(); } - inline double get_d() const { + inline double get_d() const { return v_.get_d(); } inline int get_num() const { @@ -109,7 +109,7 @@ namespace boost { namespace polygon { private: mpq_class v_; }; - + template <> struct high_precision_type { typedef mpq_class type; @@ -120,10 +120,9 @@ namespace boost { namespace polygon { mpz_class num = v.get_num(); mpz_class den = v.get_den(); num /= den; - return num.get_si(); + return num.get_si(); }; } } -//== #endif diff --git a/3party/boost/boost/polygon/gtl.hpp b/3party/boost/boost/polygon/gtl.hpp index cabbb63466..048d15dbf3 100644 --- a/3party/boost/boost/polygon/gtl.hpp +++ b/3party/boost/boost/polygon/gtl.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). diff --git a/3party/boost/boost/polygon/interval_concept.hpp b/3party/boost/boost/polygon/interval_concept.hpp index 9fc5257e7f..f5516ad179 100644 --- a/3party/boost/boost/polygon/interval_concept.hpp +++ b/3party/boost/boost/polygon/interval_concept.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -13,7 +13,7 @@ namespace boost { namespace polygon{ struct interval_concept {}; - + template struct is_interval_concept { typedef gtl_no type; }; template <> @@ -38,7 +38,7 @@ namespace boost { namespace polygon{ template struct interval_difference_type_by_concept { typedef void type; }; template - struct interval_difference_type_by_concept { + struct interval_difference_type_by_concept { typedef typename coordinate_traits::coordinate_type>::coordinate_difference type; }; template @@ -47,73 +47,87 @@ namespace boost { namespace polygon{ T, typename is_interval_concept::type>::type>::type type; }; + struct y_i_get : gtl_yes {}; template - typename interval_coordinate_type::type - get(const T& interval, direction_1d dir, - typename enable_if::type>::type>::type>::type * = 0 - ) { - return interval_traits::get(interval, dir); + typename enable_if< typename gtl_and< + y_i_get, + typename is_interval_concept::type>::type>::type, + typename interval_coordinate_type::type>::type + get(const T& interval, direction_1d dir) { + return interval_traits::get(interval, dir); } + struct y_i_set : gtl_yes {}; + template - void - set(T& interval, direction_1d dir, coordinate_type value, - typename enable_if::type>::type>::type * = 0 - ) { + typename enable_if< typename gtl_and< + y_i_set, + typename is_mutable_interval_concept::type>::type>::type, + void>::type + set(T& interval, direction_1d dir, coordinate_type value) { //this may need to be refined - interval_mutable_traits::set(interval, dir, value); + interval_mutable_traits::set(interval, dir, value); if(high(interval) < low(interval)) interval_mutable_traits::set(interval, dir.backward(), value); } - + + struct y_i_construct : gtl_yes {}; + template - T - construct(T2 low_value, T3 high_value, - typename enable_if::type>::type>::type * = 0 - ) { + typename enable_if< typename gtl_and< + y_i_construct, + typename is_mutable_interval_concept::type>::type>::type, + T>::type + construct(T2 low_value, T3 high_value) { if(low_value > high_value) std::swap(low_value, high_value); - return interval_mutable_traits::construct(low_value, high_value); - } - - template - T - copy_construct(const T2& interval, - typename enable_if< typename gtl_and::type>::type, - typename is_interval_concept::type>::type>::type>::type * = 0 - ) { - return construct - (get(interval, LOW ), - get(interval, HIGH)); + return interval_mutable_traits::construct(low_value, high_value); } + struct y_i_copy_construct : gtl_yes {}; + + template + typename enable_if< typename gtl_and_3< + y_i_copy_construct, + typename is_mutable_interval_concept::type>::type, + typename is_interval_concept::type>::type>::type, + T>::type + copy_construct(const T2& interval) { + return construct(get(interval, LOW ), get(interval, HIGH)); + } + + struct y_i_assign : gtl_yes {}; + template - T1 & - assign(T1& lvalue, const T2& rvalue, - typename enable_if< typename gtl_and< typename is_mutable_interval_concept::type>::type, - typename is_interval_concept::type>::type>::type>::type * = 0) { + typename enable_if< typename gtl_and_3< + y_i_assign, + typename is_mutable_interval_concept::type>::type, + typename is_interval_concept::type>::type>::type, + T1>::type & + assign(T1& lvalue, const T2& rvalue) { lvalue = copy_construct(rvalue); return lvalue; } + struct y_i_equivalence : gtl_yes {}; + template - bool - equivalence(const T& interval1, const T2& interval2, - typename enable_if< typename gtl_and< typename is_interval_concept::type>::type, - typename is_interval_concept::type>::type>::type>::type * = 0 - ) { - return get(interval1, LOW) == - get(interval2, LOW) && - get(interval1, HIGH) == - get(interval2, HIGH); + typename enable_if< typename gtl_and_3< + y_i_equivalence, + typename is_interval_concept::type>::type, + typename is_interval_concept::type>::type>::type, + bool>::type + equivalence(const T& interval1, const T2& interval2) { + return get(interval1, LOW) == get(interval2, LOW) && + get(interval1, HIGH) == get(interval2, HIGH); } - + struct y_i_contains : gtl_yes {}; template - typename enable_if< typename gtl_and< y_i_contains, typename is_interval_concept::type>::type >::type, bool>::type + typename enable_if< typename gtl_and< y_i_contains, typename is_interval_concept::type>::type >::type, bool>::type contains(const interval_type& interval, - typename interval_traits::coordinate_type value, + typename interval_coordinate_type::type value, bool consider_touch = true ) { if(consider_touch) { return value <= high(interval) && value >= low(interval); @@ -121,63 +135,85 @@ namespace boost { namespace polygon{ return value < high(interval) && value > low(interval); } } - + + struct y_i_contains2 : gtl_yes {}; + template - bool + typename enable_if< typename gtl_and_3< + y_i_contains2, + typename is_interval_concept::type>::type, + typename is_interval_concept::type>::type>::type, + bool>::type contains(const interval_type& interval, - const interval_type_2& value, bool consider_touch = true, - typename enable_if< typename gtl_and< typename is_interval_concept::type>::type, - typename is_interval_concept::type>::type>::type>::type * = 0 - ) { + const interval_type_2& value, + bool consider_touch = true) { return contains(interval, get(value, LOW), consider_touch) && contains(interval, get(value, HIGH), consider_touch); } - - // get the low coordinate - template - typename interval_traits::coordinate_type - low(const interval_type& interval, - typename enable_if< typename is_interval_concept::type>::type>::type * = 0 - ) { return get(interval, LOW); } - - // get the high coordinate - template - typename interval_traits::coordinate_type - high(const interval_type& interval, - typename enable_if< typename is_interval_concept::type>::type>::type * = 0 - ) { return get(interval, HIGH); } - - // get the center coordinate - template - typename interval_traits::coordinate_type - center(const interval_type& interval, - typename enable_if< typename is_interval_concept::type>::type>::type * = 0 - ) { return (high(interval) + low(interval))/2; } - struct y_i_low : gtl_yes {}; + // get the low coordinate + template + typename enable_if< typename gtl_and< + y_i_low, + typename is_interval_concept::type>::type>::type, + typename interval_coordinate_type::type>::type + low(const interval_type& interval) { return get(interval, LOW); } + + struct y_i_high : gtl_yes {}; + + // get the high coordinate + template + typename enable_if< typename gtl_and< + y_i_high, + typename is_interval_concept::type>::type>::type, + typename interval_coordinate_type::type>::type + high(const interval_type& interval) { return get(interval, HIGH); } + + struct y_i_center : gtl_yes {}; + + // get the center coordinate + template + typename enable_if< typename gtl_and< + y_i_center, + typename is_interval_concept::type>::type>::type, + typename interval_coordinate_type::type>::type + center(const interval_type& interval) { return (high(interval) + low(interval))/2; } + + + struct y_i_low2 : gtl_yes {}; + // set the low coordinate to v template - typename enable_if::type>::type>::type, void>::type + typename enable_if::type>::type>::type, + void>::type low(interval_type& interval, - typename interval_traits::coordinate_type v) { set(interval, LOW, v); } - - struct y_i_high : gtl_yes {}; + typename interval_coordinate_type::type v) { set(interval, LOW, v); } + + struct y_i_high2 : gtl_yes {}; // set the high coordinate to v template - typename enable_if::type>::type>::type, void>::type + typename enable_if::type>::type>::type, + void>::type high(interval_type& interval, - typename interval_traits::coordinate_type v) { set(interval, HIGH, v); } - + typename interval_coordinate_type::type v) { set(interval, HIGH, v); } + + struct y_i_delta : gtl_yes {}; + // get the magnitude of the interval template - typename interval_difference_type::type - delta(const interval_type& interval, - typename enable_if< typename is_interval_concept::type>::type>::type * = 0 - ) { - typedef typename coordinate_traits::coordinate_type>::coordinate_difference diffT; + typename enable_if< typename gtl_and< + y_i_delta, + typename is_interval_concept::type>::type>::type, + typename interval_difference_type::type >::type + delta(const interval_type& interval) { + typedef typename coordinate_traits::type>::coordinate_difference diffT; return (diffT)high(interval) - (diffT)low(interval); } struct y_i_flip : gtl_yes {}; @@ -186,8 +222,8 @@ namespace boost { namespace polygon{ template typename enable_if::type>::type>::type, interval_type>::type & flip(interval_type& interval, - typename interval_traits::coordinate_type axis = 0) { - typename interval_traits::coordinate_type newLow, newHigh; + typename interval_coordinate_type::type axis = 0) { + typename interval_coordinate_type::type newLow, newHigh; newLow = 2 * axis - high(interval); newHigh = 2 * axis - low(interval); low(interval, newLow); @@ -200,9 +236,9 @@ namespace boost { namespace polygon{ // scale interval by factor template typename enable_if::type>::type>::type, interval_type>::type & - scale_up(interval_type& interval, - typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { - typedef typename interval_traits::coordinate_type Unit; + scale_up(interval_type& interval, + typename coordinate_traits::type>::unsigned_area_type factor) { + typedef typename interval_coordinate_type::type Unit; Unit newHigh = high(interval) * (Unit)factor; low(interval, low(interval) * (Unit)factor); high(interval, (newHigh)); @@ -213,12 +249,12 @@ namespace boost { namespace polygon{ template typename enable_if::type>::type>::type, interval_type>::type & - scale_down(interval_type& interval, - typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { - typedef typename interval_traits::coordinate_type Unit; + scale_down(interval_type& interval, + typename coordinate_traits::type>::unsigned_area_type factor) { + typedef typename interval_coordinate_type::type Unit; typedef typename coordinate_traits::coordinate_distance dt; - Unit newHigh = scaling_policy::round((dt)(high(interval)) / (dt)factor); - low(interval, scaling_policy::round((dt)(low(interval)) / (dt)factor)); + Unit newHigh = scaling_policy::round((dt)(high(interval)) / (dt)factor); + low(interval, scaling_policy::round((dt)(low(interval)) / (dt)factor)); high(interval, (newHigh)); return interval; } @@ -228,36 +264,38 @@ namespace boost { namespace polygon{ template typename enable_if::type>::type>::type, interval_type>::type & scale(interval_type& interval, double factor) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit newHigh = scaling_policy::round((double)(high(interval)) * factor); low(interval, scaling_policy::round((double)low(interval)* factor)); high(interval, (newHigh)); return interval; } - + + struct y_i_move : gtl_yes {}; + // move interval by delta template - interval_type& - move(interval_type& interval, - typename interval_difference_type::type displacement, - typename enable_if::type>::type>::type * = 0 - ) { - typedef typename interval_traits::coordinate_type ctype; + typename enable_if< typename gtl_and< + y_i_move, + typename is_mutable_interval_concept::type>::type>::type, + interval_type>::type & + move(interval_type& interval, typename interval_difference_type::type displacement) { + typedef typename interval_coordinate_type::type ctype; typedef typename coordinate_traits::coordinate_difference Unit; Unit len = delta(interval); low(interval, static_cast(static_cast(low(interval)) + displacement)); high(interval, static_cast(static_cast(low(interval)) + len)); return interval; } - + struct y_i_convolve : gtl_yes {}; // convolve this with b template typename enable_if::type>::type>::type, interval_type>::type & convolve(interval_type& interval, - typename interval_traits::coordinate_type b) { - typedef typename interval_traits::coordinate_type Unit; + typename interval_coordinate_type::type b) { + typedef typename interval_coordinate_type::type Unit; Unit newLow = low(interval) + b; Unit newHigh = high(interval) + b; low(interval, newLow); @@ -271,8 +309,8 @@ namespace boost { namespace polygon{ template typename enable_if::type>::type>::type, interval_type>::type & deconvolve(interval_type& interval, - typename interval_traits::coordinate_type b) { - typedef typename interval_traits::coordinate_type Unit; + typename interval_coordinate_type::type b) { + typedef typename interval_coordinate_type::type Unit; Unit newLow = low(interval) - b; Unit newHigh = high(interval) - b; low(interval, newLow); @@ -284,78 +322,78 @@ namespace boost { namespace polygon{ // convolve this with b template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, + typename is_mutable_interval_concept::type>::type, typename is_interval_concept::type>::type>::type, interval_type>::type & convolve(interval_type& interval, const interval_type_2& b) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit newLow = low(interval) + low(b); Unit newHigh = high(interval) + high(b); low(interval, newLow); high(interval, newHigh); return interval; } - + struct y_i_deconvolve2 : gtl_yes {}; // deconvolve this with b template - typename enable_if< + typename enable_if< typename gtl_and_3< y_i_deconvolve2, typename is_mutable_interval_concept::type>::type, typename is_interval_concept::type>::type>::type, interval_type>::type & deconvolve(interval_type& interval, const interval_type_2& b) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit newLow = low(interval) - low(b); Unit newHigh = high(interval) - high(b); low(interval, newLow); high(interval, newHigh); return interval; } - + struct y_i_reconvolve : gtl_yes {}; // reflected convolve this with b template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, interval_type>::type & reflected_convolve(interval_type& interval, const interval_type_2& b) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit newLow = low(interval) - high(b); Unit newHigh = high(interval) - low(b); low(interval, newLow); high(interval, newHigh); return interval; } - + struct y_i_redeconvolve : gtl_yes {}; // reflected deconvolve this with b template - typename enable_if< + typename enable_if< typename gtl_and_3< y_i_redeconvolve, - typename is_mutable_interval_concept::type>::type, - typename is_interval_concept::type>::type>::type, + typename is_mutable_interval_concept::type>::type, + typename is_interval_concept::type>::type>::type, interval_type>::type & reflected_deconvolve(interval_type& interval, const interval_type_2& b) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit newLow = low(interval) + high(b); Unit newHigh = high(interval) + low(b); low(interval, newLow); high(interval, newHigh); return interval; } - + struct y_i_e_dist1 : gtl_yes {}; // distance from a coordinate to an interval @@ -363,38 +401,38 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and::type>::type>::type, typename interval_difference_type::type>::type euclidean_distance(const interval_type& interval, - typename interval_traits::coordinate_type position) { - typedef typename coordinate_traits::coordinate_type>::coordinate_difference Unit; + typename interval_coordinate_type::type position) { + typedef typename coordinate_traits::type>::coordinate_difference Unit; Unit dist[3] = {0, (Unit)low(interval) - (Unit)position, (Unit)position - (Unit)high(interval)}; return dist[ (dist[1] > 0) + ((dist[2] > 0) << 1) ]; } struct y_i_e_dist2 : gtl_yes {}; - + // distance between two intervals template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, typename interval_difference_type::type>::type euclidean_distance(const interval_type& interval, const interval_type_2& b) { - typedef typename coordinate_traits::coordinate_type>::coordinate_difference Unit; + typedef typename coordinate_traits::type>::coordinate_difference Unit; Unit dist[3] = {0, (Unit)low(interval) - (Unit)high(b), (Unit)low(b) - (Unit)high(interval)}; return dist[ (dist[1] > 0) + ((dist[2] > 0) << 1) ]; } - + struct y_i_e_intersects : gtl_yes {}; // check if Interval b intersects `this` Interval template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - bool>::type - intersects(const interval_type& interval, const interval_type_2& b, + bool>::type + intersects(const interval_type& interval, const interval_type_2& b, bool consider_touch = true) { - return consider_touch ? + return consider_touch ? (low(interval) <= high(b)) & (high(interval) >= low(b)) : (low(interval) < high(b)) & (high(interval) > low(b)); } @@ -403,15 +441,15 @@ namespace boost { namespace polygon{ // check if Interval b partially overlaps `this` Interval template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - bool>::type - boundaries_intersect(const interval_type& interval, const interval_type_2& b, + bool>::type + boundaries_intersect(const interval_type& interval, const interval_type_2& b, bool consider_touch = true) { - return (contains(interval, low(b), consider_touch) || + return (contains(interval, low(b), consider_touch) || contains(interval, high(b), consider_touch)) && - (contains(b, low(interval), consider_touch) || + (contains(b, low(interval), consider_touch) || contains(b, high(interval), consider_touch)); } @@ -421,7 +459,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - bool>::type + bool>::type abuts(const interval_type& interval, const interval_type_2& b, direction_1d dir) { return dir.to_int() ? low(b) == high(interval) : low(interval) == high(b); } @@ -430,13 +468,13 @@ namespace boost { namespace polygon{ // check if they are end to end template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - bool>::type + bool>::type abuts(const interval_type& interval, const interval_type_2& b) { return abuts(interval, b, HIGH) || abuts(interval, b, LOW); - } + } struct y_i_intersect : gtl_yes {}; @@ -444,9 +482,9 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - bool>::type + bool>::type intersect(interval_type& interval, const interval_type_2& b, bool consider_touch = true) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit lowVal = (std::max)(low(interval), low(b)); Unit highVal = (std::min)(high(interval), high(b)); bool valid = consider_touch ? @@ -463,15 +501,15 @@ namespace boost { namespace polygon{ // set 'this' interval to the generalized intersection of 'this' and b template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, interval_type>::type & generalized_intersect(interval_type& interval, const interval_type_2& b) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit coords[4] = {low(interval), high(interval), low(b), high(b)}; //consider implementing faster sorting of small fixed length range - gtlsort(coords, coords+4); + polygon_sort(coords, coords+4); low(interval, coords[1]); high(interval, coords[2]); return interval; @@ -483,19 +521,19 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and::type>::type>::type, interval_type>::type & - bloat(interval_type& interval, typename interval_traits::coordinate_type bloating) { + bloat(interval_type& interval, typename interval_coordinate_type::type bloating) { low(interval, low(interval)-bloating); high(interval, high(interval)+bloating); return interval; } - + struct y_i_bloat2 : gtl_yes {}; // bloat the specified side of `this` Interval template typename enable_if< typename gtl_and::type>::type>::type, interval_type>::type & - bloat(interval_type& interval, direction_1d dir, typename interval_traits::coordinate_type bloating) { + bloat(interval_type& interval, direction_1d dir, typename interval_coordinate_type::type bloating) { set(interval, dir, get(interval, dir) + dir.get_sign() * bloating); return interval; } @@ -506,7 +544,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and::type>::type>::type, interval_type>::type & - shrink(interval_type& interval, typename interval_traits::coordinate_type shrinking) { + shrink(interval_type& interval, typename interval_coordinate_type::type shrinking) { return bloat(interval, -shrinking); } @@ -516,44 +554,46 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and::type>::type>::type, interval_type>::type & - shrink(interval_type& interval, direction_1d dir, typename interval_traits::coordinate_type shrinking) { + shrink(interval_type& interval, direction_1d dir, typename interval_coordinate_type::type shrinking) { return bloat(interval, dir, -shrinking); } - // Enlarge `this` Interval to encompass the specified Interval - template - bool - encompass(interval_type& interval, const interval_type_2& b, - typename enable_if< - typename gtl_and< typename is_mutable_interval_concept::type>::type, - typename is_interval_concept::type>::type>::type>::type * = 0 - ) { - bool retval = !contains(interval, b, true); - low(interval, (std::min)(low(interval), low(b))); - high(interval, (std::max)(high(interval), high(b))); - return retval; - } - struct y_i_encompass : gtl_yes {}; + // Enlarge `this` Interval to encompass the specified Interval + template + typename enable_if< typename gtl_and_3< + y_i_encompass, + typename is_mutable_interval_concept::type>::type, + typename is_interval_concept::type>::type>::type, + bool>::type + encompass(interval_type& interval, const interval_type_2& b) { + bool retval = !contains(interval, b, true); + low(interval, (std::min)(low(interval), low(b))); + high(interval, (std::max)(high(interval), high(b))); + return retval; + } + + struct y_i_encompass2 : gtl_yes {}; + // Enlarge `this` Interval to encompass the specified Interval template - typename enable_if< typename gtl_and::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, bool>::type - encompass(interval_type& interval, typename interval_traits::coordinate_type b) { + encompass(interval_type& interval, typename interval_coordinate_type::type b) { bool retval = !contains(interval, b, true); low(interval, (std::min)(low(interval), b)); high(interval, (std::max)(high(interval), b)); return retval; - } + } struct y_i_get_half : gtl_yes {}; // gets the half of the interval as an interval template - typename enable_if::type>::type>::type, interval_type>::type + typename enable_if::type>::type>::type, interval_type>::type get_half(const interval_type& interval, direction_1d d1d) { - typedef typename interval_traits::coordinate_type Unit; + typedef typename interval_coordinate_type::type Unit; Unit c = (get(interval, LOW) + get(interval, HIGH)) / 2; return construct((d1d == LOW) ? get(interval, LOW) : c, (d1d == LOW) ? c : get(interval, HIGH)); @@ -564,10 +604,10 @@ namespace boost { namespace polygon{ // returns true if the 2 intervals exactly touch at one value, like in l1 <= h1 == l2 <= h2 // sets the argument to the joined interval template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - bool>::type + bool>::type join_with(interval_type& interval, const interval_type_2& b) { if(abuts(interval, b)) { encompass(interval, b); diff --git a/3party/boost/boost/polygon/interval_data.hpp b/3party/boost/boost/polygon/interval_data.hpp index cf2aabf402..dbb772e332 100644 --- a/3party/boost/boost/polygon/interval_data.hpp +++ b/3party/boost/boost/polygon/interval_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -14,31 +14,31 @@ namespace boost { namespace polygon{ public: typedef T coordinate_type; inline interval_data() -#ifndef BOOST_POLYGON_MSVC - :coords_() -#endif - {} +#ifndef BOOST_POLYGON_MSVC + :coords_() +#endif + {} inline interval_data(coordinate_type low, coordinate_type high) -#ifndef BOOST_POLYGON_MSVC - :coords_() -#endif +#ifndef BOOST_POLYGON_MSVC + :coords_() +#endif { - coords_[LOW] = low; coords_[HIGH] = high; + coords_[LOW] = low; coords_[HIGH] = high; } inline interval_data(const interval_data& that) -#ifndef BOOST_POLYGON_MSVC - :coords_() -#endif +#ifndef BOOST_POLYGON_MSVC + :coords_() +#endif { - (*this) = that; + (*this) = that; } inline interval_data& operator=(const interval_data& that) { - coords_[0] = that.coords_[0]; coords_[1] = that.coords_[1]; return *this; + coords_[0] = that.coords_[0]; coords_[1] = that.coords_[1]; return *this; } template inline interval_data& operator=(const T2& rvalue); inline coordinate_type get(direction_1d dir) const { - return coords_[dir.to_int()]; + return coords_[dir.to_int()]; } inline coordinate_type low() const { return coords_[0]; } inline coordinate_type high() const { return coords_[1]; } @@ -56,10 +56,10 @@ namespace boost { namespace polygon{ inline bool operator>(const interval_data& that) const { return that < *this; } inline bool operator>=(const interval_data& that) const { return !((*this) < that); } inline void set(direction_1d dir, coordinate_type value) { - coords_[dir.to_int()] = value; + coords_[dir.to_int()] = value; } private: - coordinate_type coords_[2]; + coordinate_type coords_[2]; }; } diff --git a/3party/boost/boost/polygon/interval_traits.hpp b/3party/boost/boost/polygon/interval_traits.hpp index a7d74efcda..97f918f280 100644 --- a/3party/boost/boost/polygon/interval_traits.hpp +++ b/3party/boost/boost/polygon/interval_traits.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -13,21 +13,20 @@ namespace boost { namespace polygon{ typedef typename T::coordinate_type coordinate_type; static inline coordinate_type get(const T& interval, direction_1d dir) { - return interval.get(dir); + return interval.get(dir); } }; template struct interval_mutable_traits { static inline void set(T& interval, direction_1d dir, typename interval_traits::coordinate_type value) { - interval.set(dir, value); + interval.set(dir, value); } - static inline T construct(typename interval_traits::coordinate_type low_value, + static inline T construct(typename interval_traits::coordinate_type low_value, typename interval_traits::coordinate_type high_value) { - return T(low_value, high_value); + return T(low_value, high_value); } }; } } #endif - diff --git a/3party/boost/boost/polygon/isotropy.hpp b/3party/boost/boost/polygon/isotropy.hpp index 055707c3e8..890595e35d 100644 --- a/3party/boost/boost/polygon/isotropy.hpp +++ b/3party/boost/boost/polygon/isotropy.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -26,7 +26,7 @@ #ifndef BOOST_POLYGON_NO_DEPS -#include +#include #ifdef BOOST_MSVC #define BOOST_POLYGON_MSVC #endif @@ -58,7 +58,7 @@ typedef boost::ulong_long_type polygon_ulong_long_type; typedef long long polygon_long_long_type; typedef unsigned long long polygon_ulong_long_type; - namespace boost { + namespace boost { template struct enable_if_c { typedef T type; @@ -67,7 +67,7 @@ typedef unsigned long long polygon_ulong_long_type; template struct enable_if_c {}; - template + template struct enable_if : public enable_if_c {}; template @@ -78,7 +78,7 @@ typedef unsigned long long polygon_ulong_long_type; template struct lazy_enable_if_c {}; - template + template struct lazy_enable_if : public lazy_enable_if_c {}; @@ -90,7 +90,7 @@ typedef unsigned long long polygon_ulong_long_type; template struct disable_if_c {}; - template + template struct disable_if : public disable_if_c {}; template @@ -101,7 +101,7 @@ typedef unsigned long long polygon_ulong_long_type; template struct lazy_disable_if_c {}; - template + template struct lazy_disable_if : public lazy_disable_if_c {}; } @@ -129,17 +129,18 @@ namespace boost { namespace polygon{ struct undefined_concept {}; template - struct geometry_concept { typedef undefined_concept type; }; + struct geometry_concept { typedef undefined_concept type; }; template struct view_of {}; template - view_of view_as(const T2& obj) { return view_of(obj); } + view_of view_as(const T2& obj) { return view_of(obj); } template struct coordinate_traits {}; + //used to override long double with an infinite precision datatype template struct high_precision_type { typedef long double type; @@ -150,6 +151,14 @@ namespace boost { namespace polygon{ return T(v); } + //used to override std::sort with an alternative (parallel) algorithm + template + void polygon_sort(iter_type _b_, iter_type _e_); + + template + void polygon_sort(iter_type _b_, iter_type _e_, const pred_type& _pred_); + + template <> struct coordinate_traits { typedef int coordinate_type; @@ -314,13 +323,13 @@ namespace boost { namespace polygon{ template struct area_type_by_domain { typedef typename coordinate_traits::area_type type; }; template - struct area_type_by_domain { + struct area_type_by_domain { typedef typename coordinate_traits::manhattan_area_type type; }; struct y_c_edist : gtl_yes {}; template - typename enable_if< + typename enable_if< typename gtl_and_3::type, coordinate_concept>::type, typename gtl_same_type::type, coordinate_concept>::type>::type, typename coordinate_traits::coordinate_difference>::type @@ -383,7 +392,7 @@ namespace boost { namespace polygon{ inline direction_1d(const direction_1d_enum val) : val_(val) {} explicit inline direction_1d(const direction_2d& that); explicit inline direction_1d(const direction_3d& that); - inline direction_1d& operator = (const direction_1d& d) { + inline direction_1d& operator = (const direction_1d& d) { val_ = d.val_; return * this; } inline bool operator==(direction_1d d) const { return (val_ == d.val_); } inline bool operator!=(direction_1d d) const { return !((*this) == d); } @@ -426,7 +435,7 @@ namespace boost { namespace polygon{ inline direction_2d() : val_(WEST) {} inline direction_2d(const direction_2d& that) : val_(that.val_) {} - + inline direction_2d(const direction_2d_enum val) : val_(val) {} inline direction_2d& operator=(const direction_2d& d) { @@ -489,7 +498,7 @@ namespace boost { namespace polygon{ explicit inline orientation_3d(const direction_2d& that); explicit inline orientation_3d(const direction_3d& that); inline ~orientation_3d() { } - inline orientation_3d& operator=(const orientation_3d& ori) { + inline orientation_3d& operator=(const orientation_3d& ori) { val_ = ori.val_; return * this; } inline bool operator==(orientation_3d that) const { return (val_ == that.val_); } inline bool operator!=(orientation_3d that) const { return (val_ != that.val_); } @@ -507,7 +516,7 @@ namespace boost { namespace polygon{ inline direction_3d(direction_2d that) : val_(that.to_int()) {} inline direction_3d(const direction_3d& that) : val_(that.val_) {} - + inline direction_3d(const direction_2d_enum val) : val_(val) {} inline direction_3d(const direction_3d_enum val) : val_(val) {} @@ -551,4 +560,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/point_3d_concept.hpp b/3party/boost/boost/polygon/point_3d_concept.hpp index ab7afeb981..61832370e7 100644 --- a/3party/boost/boost/polygon/point_3d_concept.hpp +++ b/3party/boost/boost/polygon/point_3d_concept.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -12,7 +12,7 @@ #include "point_3d_traits.hpp" namespace boost { namespace polygon{ struct point_3d_concept {}; - + template struct is_point_3d_concept { typedef gtl_no type; }; template <> @@ -38,8 +38,8 @@ namespace boost { namespace polygon{ template struct point_3d_difference_type_by_concept { typedef void type; }; template - struct point_3d_difference_type_by_concept { - typedef typename coordinate_traits::coordinate_type>::coordinate_difference type; }; + struct point_3d_difference_type_by_concept { + typedef typename coordinate_traits::type>::coordinate_difference type; }; template struct point_3d_difference_type { @@ -50,8 +50,8 @@ namespace boost { namespace polygon{ template struct point_3d_distance_type_by_concept { typedef void type; }; template - struct point_3d_distance_type_by_concept { - typedef typename coordinate_traits::coordinate_type>::coordinate_distance type; }; + struct point_3d_distance_type_by_concept { + typedef typename coordinate_traits::type>::coordinate_distance type; }; template struct point_3d_distance_type { @@ -62,10 +62,10 @@ namespace boost { namespace polygon{ struct y_p3d_get : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, - typename point_3d_coordinate_type::type >::type + typename enable_if< typename gtl_and::type>::type>::type, + typename point_3d_coordinate_type::type >::type get(const T& point, orientation_3d orient) { return point_3d_traits::get(point, orient); } - + struct y_p3d_set : gtl_yes {}; template @@ -86,11 +86,11 @@ namespace boost { namespace polygon{ return point_3d_mutable_traits::construct(x_value, y_value, z_value); } struct y_p3d_assign : gtl_yes {}; - + template typename enable_if< - typename gtl_and_3::type>::type, - typename is_point_3d_concept::type>::type>::type, + typename gtl_and_3::type>::type, + typename is_point_3d_concept::type>::type>::type, point_3d_type_1>::type & assign(point_3d_type_1& lvalue, const point_3d_type_2& rvalue) { set(lvalue, HORIZONTAL, get(rvalue, HORIZONTAL)); @@ -102,8 +102,8 @@ namespace boost { namespace polygon{ struct y_p3d_z : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type, - typename point_3d_traits::coordinate_type >::type + typename enable_if< typename gtl_and::type>::type>::type, + typename point_3d_coordinate_type::type >::type z(const point_type& point) { return get(point, PROXIMAL); } struct y_p3d_x : gtl_yes {}; @@ -128,7 +128,7 @@ namespace boost { namespace polygon{ template typename enable_if< - typename gtl_and_3::type>::type, + typename gtl_and_3::type>::type, typename gtl_same_type::type>::type>::type, bool>::type equivalence(const T& point1, const T2& point2) { @@ -138,11 +138,11 @@ namespace boost { namespace polygon{ struct y_p3d_dist : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, - typename is_point_3d_concept::type>::type>::type, + typename enable_if< typename gtl_and_3::type>::type, + typename is_point_3d_concept::type>::type>::type, typename point_3d_difference_type::type>::type euclidean_distance(const point_type_1& point1, const point_type_2& point2, orientation_3d orient) { - typedef typename coordinate_traits::coordinate_type>::coordinate_difference return_type; + typedef typename coordinate_traits::type>::coordinate_difference return_type; return_type return_value = (return_type)get(point1, orient) - (return_type)get(point2, orient); return return_value < 0 ? -return_value : return_value; @@ -151,33 +151,33 @@ namespace boost { namespace polygon{ struct y_p3d_man_dist : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, + typename enable_if< typename gtl_and_3::type>::type, typename gtl_same_type::type>::type>::type, typename point_3d_difference_type::type>::type manhattan_distance(const point_type_1& point1, const point_type_2& point2) { - return euclidean_distance(point1, point2, HORIZONTAL) + euclidean_distance(point1, point2, VERTICAL) + return euclidean_distance(point1, point2, HORIZONTAL) + euclidean_distance(point1, point2, VERTICAL) + euclidean_distance(point1, point2, PROXIMAL); } struct y_p3d_dist2 : gtl_yes {}; template - typename enable_if< typename gtl_and_3< y_p3d_dist2, - typename gtl_same_type::type>::type, + typename enable_if< typename gtl_and_3< y_p3d_dist2, + typename gtl_same_type::type>::type, typename gtl_same_type::type>::type>::type, typename point_3d_distance_type::type>::type euclidean_distance(const point_type_1& point1, const point_type_2& point2) { - typedef typename coordinate_traits::coordinate_type>::coordinate_distance return_value; + typedef typename coordinate_traits::type>::coordinate_distance return_value; return_value pdist = (return_value)euclidean_distance(point1, point2, PROXIMAL); pdist *= pdist; - return sqrt((double)(distance_squared(point1, point2) + pdist)); + return std::sqrt((double)(distance_squared(point1, point2) + pdist)); } - + struct y_p3d_convolve : gtl_yes {}; template typename enable_if< typename gtl_and_3< y_p3d_convolve, - typename is_mutable_point_3d_concept::type>::type, + typename is_mutable_point_3d_concept::type>::type, typename gtl_same_type::type>::type>::type, point_type_1>::type & convolve(point_type_1& lvalue, const point_type_2& rvalue) { @@ -186,12 +186,12 @@ namespace boost { namespace polygon{ z(lvalue, z(lvalue) + z(rvalue)); return lvalue; } - + struct y_p3d_deconvolve : gtl_yes {}; template typename enable_if< - typename gtl_and_3::type>::type, + typename gtl_and_3::type>::type, typename gtl_same_type::type>::type>::type, point_type_1>::type & deconvolve(point_type_1& lvalue, const point_type_2& rvalue) { @@ -204,39 +204,39 @@ namespace boost { namespace polygon{ struct y_p3d_scale_up : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, point_type>::type & - scale_up(point_type& point, - typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { - x(point, x(point) * (typename point_3d_traits::coordinate_type)factor); - y(point, y(point) * (typename point_3d_traits::coordinate_type)factor); - z(point, z(point) * (typename point_3d_traits::coordinate_type)factor); + scale_up(point_type& point, + typename coordinate_traits::type>::unsigned_area_type factor) { + x(point, x(point) * (typename point_3d_coordinate_type::type)factor); + y(point, y(point) * (typename point_3d_coordinate_type::type)factor); + z(point, z(point) * (typename point_3d_coordinate_type::type)factor); return point; } struct y_p3d_scale_down : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, point_type>::type & - scale_down(point_type& point, - typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { - typedef typename point_3d_traits::coordinate_type Unit; + scale_down(point_type& point, + typename coordinate_traits::type>::unsigned_area_type factor) { + typedef typename point_3d_coordinate_type::type Unit; typedef typename coordinate_traits::coordinate_distance dt; - x(point, scaling_policy::round((dt)(x(point)) / (dt)factor)); - y(point, scaling_policy::round((dt)(y(point)) / (dt)factor)); - z(point, scaling_policy::round((dt)(z(point)) / (dt)factor)); + x(point, scaling_policy::round((dt)(x(point)) / (dt)factor)); + y(point, scaling_policy::round((dt)(y(point)) / (dt)factor)); + z(point, scaling_policy::round((dt)(z(point)) / (dt)factor)); return point; } struct y_p3d_scale : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, point_type>::type & - scale(point_type& point, + scale(point_type& point, const scaling_type& scaling) { - typedef typename point_3d_traits::coordinate_type Unit; + typedef typename point_3d_coordinate_type::type Unit; Unit x_(x(point)), y_(y(point)), z_(z(point)); scaling.scale(x_, y_, z_); x(point, x_); @@ -248,10 +248,10 @@ namespace boost { namespace polygon{ struct y_p3d_transform : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, point_type>::type & transform(point_type& point, const transformation_type& transformation) { - typedef typename point_3d_traits::coordinate_type Unit; + typedef typename point_3d_coordinate_type::type Unit; Unit x_(x(point)), y_(y(point)), z_(z(point)); transformation.transform(x_, y_, z_); x(point, x_); diff --git a/3party/boost/boost/polygon/point_3d_data.hpp b/3party/boost/boost/polygon/point_3d_data.hpp index c57097cea2..24a01af049 100644 --- a/3party/boost/boost/polygon/point_3d_data.hpp +++ b/3party/boost/boost/polygon/point_3d_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -12,7 +12,7 @@ namespace boost { namespace polygon{ class point_3d_data { public: typedef T coordinate_type; - inline point_3d_data():coords_(){} + inline point_3d_data():coords_(){} inline point_3d_data(coordinate_type x, coordinate_type y):coords_() { coords_[HORIZONTAL] = x; coords_[VERTICAL] = y; coords_[PROXIMAL] = 0; } inline point_3d_data(coordinate_type x, coordinate_type y, coordinate_type z) @@ -23,7 +23,7 @@ namespace boost { namespace polygon{ coords_[HORIZONTAL] = x; coords_[VERTICAL] = y; coords_[PROXIMAL] = z; } inline point_3d_data(const point_3d_data& that):coords_() { (*this) = that; } inline point_3d_data& operator=(const point_3d_data& that) { - coords_[0] = that.coords_[0]; coords_[1] = that.coords_[1]; + coords_[0] = that.coords_[0]; coords_[1] = that.coords_[1]; coords_[2] = that.coords_[2]; return *this; } template inline point_3d_data& operator=(const T2& rvalue); @@ -42,10 +42,8 @@ namespace boost { namespace polygon{ inline void set(orientation_3d orient, coordinate_type value) { coords_[orient.to_int()] = value; } private: - coordinate_type coords_[3]; + coordinate_type coords_[3]; }; } } #endif - - diff --git a/3party/boost/boost/polygon/point_3d_traits.hpp b/3party/boost/boost/polygon/point_3d_traits.hpp index 9f6eb9a3c2..3de97cc364 100644 --- a/3party/boost/boost/polygon/point_3d_traits.hpp +++ b/3party/boost/boost/polygon/point_3d_traits.hpp @@ -23,7 +23,7 @@ namespace boost { namespace polygon{ struct point_3d_mutable_traits { static inline void set(T& point, orientation_3d orient, typename point_3d_traits::coordinate_type value) { point.set(orient, value); } - + static inline T construct(typename point_3d_traits::coordinate_type x_value, typename point_3d_traits::coordinate_type y_value, typename point_3d_traits::coordinate_type z_value) { @@ -32,4 +32,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/point_concept.hpp b/3party/boost/boost/polygon/point_concept.hpp index 6e2ce0a520..e4f42f92af 100644 --- a/3party/boost/boost/polygon/point_concept.hpp +++ b/3party/boost/boost/polygon/point_concept.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -13,7 +13,7 @@ namespace boost { namespace polygon{ struct point_concept {}; - + template struct is_point_concept { typedef gtl_no type; }; template <> @@ -41,8 +41,8 @@ namespace boost { namespace polygon{ template struct point_difference_type_by_concept { typedef void type; }; template - struct point_difference_type_by_concept { - typedef typename coordinate_traits::coordinate_type>::coordinate_difference type; }; + struct point_difference_type_by_concept { + typedef typename coordinate_traits::type>::coordinate_difference type; }; template struct point_difference_type { @@ -53,8 +53,8 @@ namespace boost { namespace polygon{ template struct point_distance_type_by_concept { typedef void type; }; template - struct point_distance_type_by_concept { - typedef typename coordinate_traits::coordinate_type>::coordinate_distance type; }; + struct point_distance_type_by_concept { + typedef typename coordinate_traits::type>::coordinate_distance type; }; template struct point_distance_type { @@ -62,36 +62,42 @@ namespace boost { namespace polygon{ T, typename is_point_concept::type>::type>::type type; }; + struct y_pt_get : gtl_yes {}; + template - typename point_coordinate_type::type - get(const T& point, orientation_2d orient, - typename enable_if< typename gtl_if::type>::type>::type>::type * = 0 - ) { + typename enable_if< typename gtl_and::type>::type>::type, + typename point_coordinate_type::type >::type + get(const T& point, orientation_2d orient) { return point_traits::get(point, orient); } - + + struct y_pt_set : gtl_yes {}; + template - void - set(T& point, orientation_2d orient, coordinate_type value, - typename enable_if::type>::type>::type * = 0 - ) { + typename enable_if< typename gtl_and::type>::type>::type, + void>::type + set(T& point, orientation_2d orient, coordinate_type value) { point_mutable_traits::set(point, orient, value); } - + + struct y_pt_construct : gtl_yes {}; + template - T - construct(coordinate_type1 x_value, coordinate_type2 y_value, - typename enable_if::type>::type>::type * = 0 - ) { - return point_mutable_traits::construct(x_value, y_value); + typename enable_if< typename gtl_and::type>::type>::type, + T>::type + construct(coordinate_type1 x_value, coordinate_type2 y_value) { + return point_mutable_traits::construct(x_value, y_value); } + struct y_pt_assign : gtl_yes {}; + template - T1& - assign(T1& lvalue, const T2& rvalue, - typename enable_if< typename gtl_and< typename is_mutable_point_concept::type>::type, - typename is_point_concept::type>::type>::type>::type * = 0 - ) { + typename enable_if::type>::type, + typename is_point_concept::type>::type>::type, + T1>::type & + assign(T1& lvalue, const T2& rvalue) { set(lvalue, HORIZONTAL, get(rvalue, HORIZONTAL)); set(lvalue, VERTICAL, get(rvalue, VERTICAL)); return lvalue; @@ -100,8 +106,8 @@ namespace boost { namespace polygon{ struct y_p_x : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type, - typename point_traits::coordinate_type >::type + typename enable_if< typename gtl_and::type>::type>::type, + typename point_coordinate_type::type >::type x(const point_type& point) { return get(point, HORIZONTAL); } @@ -109,8 +115,8 @@ namespace boost { namespace polygon{ struct y_p_y : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type, - typename point_traits::coordinate_type >::type + typename enable_if< typename gtl_and::type>::type>::type, + typename point_coordinate_type::type >::type y(const point_type& point) { return get(point, VERTICAL); } @@ -119,7 +125,7 @@ namespace boost { namespace polygon{ template typename enable_if::type>::type>::type, - void>::type + void>::type x(point_type& point, coordinate_type value) { set(point, HORIZONTAL, value); } @@ -128,62 +134,71 @@ namespace boost { namespace polygon{ template typename enable_if::type>::type>::type, - void>::type + void>::type y(point_type& point, coordinate_type value) { set(point, VERTICAL, value); } + struct y_pt_equiv : gtl_yes {}; + template - bool - equivalence(const T& point1, const T2& point2, - typename enable_if< typename gtl_and::type>::type, - typename is_point_concept::type>::type>::type>::type * = 0 - ) { - typename point_traits::coordinate_type x1 = x(point1); - typename point_traits::coordinate_type x2 = get(point2, HORIZONTAL); - typename point_traits::coordinate_type y1 = get(point1, VERTICAL); - typename point_traits::coordinate_type y2 = y(point2); + typename enable_if::type>::type, + typename is_point_concept::type>::type>::type, + bool>::type + equivalence(const T& point1, const T2& point2) { + typename point_coordinate_type::type x1 = x(point1); + typename point_coordinate_type::type x2 = get(point2, HORIZONTAL); + typename point_coordinate_type::type y1 = get(point1, VERTICAL); + typename point_coordinate_type::type y2 = y(point2); return x1 == x2 && y1 == y2; } - template - typename point_difference_type::type - manhattan_distance(const point_type_1& point1, const point_type_2& point2, - typename enable_if< typename gtl_and::type>::type, - typename is_point_concept::type>::type>::type>::type * = 0) { - return euclidean_distance(point1, point2, HORIZONTAL) + euclidean_distance(point1, point2, VERTICAL); - } - - struct y_i_ed1 : gtl_yes {}; + struct y_pt_man_dist : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, + typename enable_if< typename gtl_and_3< + y_pt_man_dist, + typename gtl_same_type::type>::type, + typename is_point_concept::type>::type>::type, + typename point_difference_type::type>::type + manhattan_distance(const point_type_1& point1, const point_type_2& point2) { + return euclidean_distance(point1, point2, HORIZONTAL) + euclidean_distance(point1, point2, VERTICAL); + } + + struct y_pt_ed1 : gtl_yes {}; + + template + typename enable_if< typename gtl_and_3::type>::type, typename is_point_concept::type>::type>::type, typename point_difference_type::type>::type euclidean_distance(const point_type_1& point1, const point_type_2& point2, orientation_2d orient) { - typename coordinate_traits::coordinate_type>::coordinate_difference return_value = + typename coordinate_traits::type>::coordinate_difference return_value = get(point1, orient) - get(point2, orient); - return return_value < 0 ? (typename coordinate_traits::coordinate_type>::coordinate_difference)-return_value : return_value; + return return_value < 0 ? (typename coordinate_traits::type>::coordinate_difference)-return_value : return_value; } - - struct y_i_ed2 : gtl_yes {}; + + struct y_pt_ed2 : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, + typename enable_if< typename gtl_and_3::type>::type, typename gtl_same_type::type>::type>::type, typename point_distance_type::type>::type euclidean_distance(const point_type_1& point1, const point_type_2& point2) { - typedef typename point_traits::coordinate_type Unit; - return sqrt((double)(distance_squared(point1, point2))); + typedef typename point_coordinate_type::type Unit; + return std::sqrt((double)(distance_squared(point1, point2))); } - + + struct y_pt_eds : gtl_yes {}; + template - typename point_difference_type::type - distance_squared(const point_type_1& point1, const point_type_2& point2, - typename enable_if< typename gtl_and::type>::type, - typename is_point_concept::type>::type>::type>::type * = 0 - ) { - typedef typename point_traits::coordinate_type Unit; + typename enable_if< typename gtl_and_3< + y_pt_eds, + typename is_point_concept::type>::type, + typename is_point_concept::type>::type>::type, + typename point_difference_type::type>::type + distance_squared(const point_type_1& point1, const point_type_2& point2) { + typedef typename point_coordinate_type::type Unit; typename coordinate_traits::coordinate_difference dx = euclidean_distance(point1, point2, HORIZONTAL); typename coordinate_traits::coordinate_difference dy = euclidean_distance(point1, point2, VERTICAL); dx *= dx; @@ -191,58 +206,66 @@ namespace boost { namespace polygon{ return dx + dy; } + struct y_pt_convolve : gtl_yes {}; + template - point_type_1 & - convolve(point_type_1& lvalue, const point_type_2& rvalue, - typename enable_if< typename gtl_and::type>::type, - typename is_point_concept::type>::type>::type>::type * = 0 - ) { + typename enable_if< typename gtl_and_3< + y_pt_convolve, + typename is_mutable_point_concept::type>::type, + typename is_point_concept::type>::type>::type, + point_type_1>::type & + convolve(point_type_1& lvalue, const point_type_2& rvalue) { x(lvalue, x(lvalue) + x(rvalue)); y(lvalue, y(lvalue) + y(rvalue)); return lvalue; } - + + struct y_pt_deconvolve : gtl_yes {}; + template - point_type_1 & - deconvolve(point_type_1& lvalue, const point_type_2& rvalue, - typename enable_if< typename gtl_and::type>::type, - typename is_point_concept::type>::type>::type>::type * = 0 - ) { + typename enable_if< typename gtl_and_3< + y_pt_deconvolve, + typename is_mutable_point_concept::type>::type, + typename is_point_concept::type>::type>::type, + point_type_1>::type & + deconvolve(point_type_1& lvalue, const point_type_2& rvalue) { x(lvalue, x(lvalue) - x(rvalue)); y(lvalue, y(lvalue) - y(rvalue)); return lvalue; } - + + struct y_pt_scale_up : gtl_yes {}; + template - point_type & - scale_up(point_type& point, coord_type factor, - typename enable_if::type>::type>::type * = 0 - ) { - typedef typename point_traits::coordinate_type Unit; + typename enable_if< typename gtl_and::type>::type>::type, + point_type>::type & + scale_up(point_type& point, coord_type factor) { + typedef typename point_coordinate_type::type Unit; x(point, x(point) * (Unit)factor); y(point, y(point) * (Unit)factor); return point; } + struct y_pt_scale_down : gtl_yes {}; + template - point_type & - scale_down(point_type& point, coord_type factor, - typename enable_if::type>::type>::type * = 0 - ) { - typedef typename point_traits::coordinate_type Unit; + typename enable_if< typename gtl_and::type>::type>::type, + point_type>::type & + scale_down(point_type& point, coord_type factor) { + typedef typename point_coordinate_type::type Unit; typedef typename coordinate_traits::coordinate_distance dt; - x(point, scaling_policy::round((dt)((dt)(x(point)) / (dt)factor))); - y(point, scaling_policy::round((dt)((dt)(y(point)) / (dt)factor))); + x(point, scaling_policy::round((dt)((dt)(x(point)) / (dt)factor))); + y(point, scaling_policy::round((dt)((dt)(y(point)) / (dt)factor))); return point; } + struct y_pt_scale : gtl_yes {}; + template - point_type & - scale(point_type& point, - const scaling_type& scaling, - typename enable_if::type>::type>::type * = 0 - ) { - typedef typename point_traits::coordinate_type Unit; + typename enable_if< typename gtl_and::type>::type>::type, + point_type>::type & + scale(point_type& point, const scaling_type& scaling) { + typedef typename point_coordinate_type::type Unit; Unit x_(x(point)), y_(y(point)); scaling.scale(x_, y_); x(point, x_); @@ -250,12 +273,13 @@ namespace boost { namespace polygon{ return point; } + struct y_pt_transform : gtl_yes {}; + template - point_type & - transform(point_type& point, const transformation_type& transformation, - typename enable_if::type>::type>::type * = 0 - ) { - typedef typename point_traits::coordinate_type Unit; + typename enable_if< typename gtl_and::type>::type>::type, + point_type>::type & + transform(point_type& point, const transformation_type& transformation) { + typedef typename point_coordinate_type::type Unit; Unit x_(x(point)), y_(y(point)); transformation.transform(x_, y_); x(point, x_); @@ -266,16 +290,11 @@ namespace boost { namespace polygon{ struct y_pt_move : gtl_yes {}; template - typename enable_if< - typename gtl_and< y_pt_move, - typename is_mutable_point_concept< - typename geometry_concept::type>::type>::type, - point_type>::type & + typename enable_if< typename gtl_and::type>::type>::type, + point_type>::type & move(point_type& point, orientation_2d orient, - typename point_traits::coordinate_type displacement, - typename enable_if::type>::type>::type * = 0 - ) { - typedef typename point_traits::coordinate_type Unit; + typename point_coordinate_type::type displacement) { + typedef typename point_coordinate_type::type Unit; Unit v(get(point, orient)); set(point, orient, v + displacement); return point; @@ -295,4 +314,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/point_data.hpp b/3party/boost/boost/polygon/point_data.hpp index d181b035d5..0ed55cf11d 100644 --- a/3party/boost/boost/polygon/point_data.hpp +++ b/3party/boost/boost/polygon/point_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -18,34 +18,34 @@ namespace boost { namespace polygon{ typedef T coordinate_type; inline point_data() #ifndef BOOST_POLYGON_MSVC - :coords_() + :coords_() #endif - {} + {} inline point_data(coordinate_type x, coordinate_type y) #ifndef BOOST_POLYGON_MSVC - :coords_() + :coords_() #endif { - coords_[HORIZONTAL] = x; coords_[VERTICAL] = y; + coords_[HORIZONTAL] = x; coords_[VERTICAL] = y; } inline point_data(const point_data& that) #ifndef BOOST_POLYGON_MSVC - :coords_() + :coords_() #endif { (*this) = that; } template point_data(const other& that) #ifndef BOOST_POLYGON_MSVC - :coords_() + :coords_() #endif { (*this) = that; } inline point_data& operator=(const point_data& that) { - coords_[0] = that.coords_[0]; coords_[1] = that.coords_[1]; return *this; + coords_[0] = that.coords_[0]; coords_[1] = that.coords_[1]; return *this; } template inline point_data(const T1& x, const T2& y) #ifndef BOOST_POLYGON_MSVC - :coords_() + :coords_() #endif { coords_[HORIZONTAL] = (coordinate_type)x; @@ -54,7 +54,7 @@ namespace boost { namespace polygon{ template inline point_data(const point_data& rvalue) #ifndef BOOST_POLYGON_MSVC - :coords_() + :coords_() #endif { coords_[HORIZONTAL] = (coordinate_type)(rvalue.x()); @@ -76,10 +76,10 @@ namespace boost { namespace polygon{ inline bool operator>(const point_data& that) const { return that < *this; } inline bool operator>=(const point_data& that) const { return !((*this) < that); } inline coordinate_type get(orientation_2d orient) const { - return coords_[orient.to_int()]; + return coords_[orient.to_int()]; } inline void set(orientation_2d orient, coordinate_type value) { - coords_[orient.to_int()] = value; + coords_[orient.to_int()] = value; } inline coordinate_type x() const { return coords_[HORIZONTAL]; @@ -96,10 +96,9 @@ namespace boost { namespace polygon{ return *this; } private: - coordinate_type coords_[2]; + coordinate_type coords_[2]; }; } } #endif - diff --git a/3party/boost/boost/polygon/point_traits.hpp b/3party/boost/boost/polygon/point_traits.hpp index 504fa355f5..6604d2c43e 100644 --- a/3party/boost/boost/polygon/point_traits.hpp +++ b/3party/boost/boost/polygon/point_traits.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -14,22 +14,21 @@ namespace boost { namespace polygon{ template struct point_traits { typedef typename T::coordinate_type coordinate_type; - + static inline coordinate_type get(const T& point, orientation_2d orient) { - return point.get(orient); + return point.get(orient); } }; template struct point_mutable_traits { static inline void set(T& point, orientation_2d orient, typename point_traits::coordinate_type value) { - point.set(orient, value); + point.set(orient, value); } static inline T construct(typename point_traits::coordinate_type x_value, typename point_traits::coordinate_type y_value) { - return T(x_value, y_value); + return T(x_value, y_value); } }; } } #endif - diff --git a/3party/boost/boost/polygon/polygon.hpp b/3party/boost/boost/polygon/polygon.hpp index 4c3e43a5eb..ddbc08d69f 100644 --- a/3party/boost/boost/polygon/polygon.hpp +++ b/3party/boost/boost/polygon/polygon.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -34,6 +34,11 @@ #include "rectangle_traits.hpp" #include "rectangle_concept.hpp" +//segment +#include "segment_data.hpp" +#include "segment_traits.hpp" +#include "segment_concept.hpp" + //algorithms needed by polygon types #include "detail/iterator_points_to_compact.hpp" #include "detail/iterator_compact_to_points.hpp" @@ -88,4 +93,6 @@ #include "polygon_set_concept.hpp" +#include "segment_utils.hpp" + #endif diff --git a/3party/boost/boost/polygon/polygon_45_data.hpp b/3party/boost/boost/polygon/polygon_45_data.hpp index 86753ec13e..cdd5c2498b 100644 --- a/3party/boost/boost/polygon/polygon_45_data.hpp +++ b/3party/boost/boost/polygon/polygon_45_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -34,7 +34,7 @@ public: // copy constructor (since we have dynamic memory) inline polygon_45_data(const polygon_45_data& that) : coords_(that.coords_) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline polygon_45_data& operator=(const polygon_45_data& that) { coords_ = that.coords_; @@ -63,11 +63,10 @@ public: inline std::size_t size() const { return coords_.size(); } public: - std::vector > coords_; + std::vector > coords_; }; } } #endif - diff --git a/3party/boost/boost/polygon/polygon_45_set_concept.hpp b/3party/boost/boost/polygon/polygon_45_set_concept.hpp index f22910cb90..623415fb59 100644 --- a/3party/boost/boost/polygon/polygon_45_set_concept.hpp +++ b/3party/boost/boost/polygon/polygon_45_set_concept.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -28,14 +28,14 @@ namespace boost { namespace polygon{ begin_45_set_data(const polygon_set_type& polygon_set) { return polygon_45_set_traits::begin(polygon_set); } - + template typename enable_if< typename gtl_if::type>::type, typename polygon_45_set_traits::iterator_type>::type end_45_set_data(const polygon_set_type& polygon_set) { return polygon_45_set_traits::end(polygon_set); } - + template typename enable_if< typename gtl_if::type>::type, bool>::type @@ -79,9 +79,9 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename gtl_if::type>::type, - typename gtl_if::type>::type>::type, - bool>::type + bool>::type equivalence(const polygon_set_type_1& lvalue, const polygon_set_type_2& rvalue) { polygon_45_set_data::coordinate_type> ps1; @@ -111,14 +111,14 @@ namespace boost { namespace polygon{ ps.clean(); return ps.empty(); } - + //extents template typename enable_if< typename gtl_and< typename gtl_if::type>::type, typename is_mutable_rectangle_concept::type>::type>::type, bool>::type - extents(rectangle_type& extents_rectangle, + extents(rectangle_type& extents_rectangle, const polygon_set_type& polygon_set) { clean(polygon_set); polygon_45_set_data::coordinate_type> ps; @@ -181,7 +181,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_45_set_type::type, polygon_set_type>::type & - resize(polygon_set_type& polygon_set, coord_type resizing, + resize(polygon_set_type& polygon_set, coord_type resizing, RoundingOption rounding = CLOSEST, CornerOption corner = INTERSECTION) { typedef typename polygon_45_set_traits::coordinate_type Unit; clean(polygon_set); @@ -195,7 +195,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_45_set_type::type, polygon_set_type>::type & - bloat(polygon_set_type& polygon_set, + bloat(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type bloating) { return resize(polygon_set, static_cast::coordinate_type>(bloating)); } @@ -203,7 +203,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_45_set_type::type, polygon_set_type>::type & - shrink(polygon_set_type& polygon_set, + shrink(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type shrinking) { return resize(polygon_set, -(typename polygon_45_set_traits::coordinate_type)shrinking); } @@ -211,7 +211,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_45_set_type::type, polygon_set_type>::type & - grow_and(polygon_set_type& polygon_set, + grow_and(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type bloating) { typedef typename polygon_45_set_traits::coordinate_type Unit; std::vector > polys; @@ -233,7 +233,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_45_set_type::type, polygon_set_type>::type & - scale_up(polygon_set_type& polygon_set, + scale_up(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { typedef typename polygon_45_set_traits::coordinate_type Unit; clean(polygon_set); @@ -247,7 +247,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_45_set_type::type, polygon_set_type>::type & - scale_down(polygon_set_type& polygon_set, + scale_down(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { typedef typename polygon_45_set_traits::coordinate_type Unit; clean(polygon_set); @@ -316,7 +316,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_45_set_type::type, polygon_set_type>::type & - keep(polygon_set_type& polygon_set, + keep(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::area_type min_area, typename coordinate_traits::coordinate_type>::area_type max_area, typename coordinate_traits::coordinate_type>::unsigned_area_type min_width, @@ -408,13 +408,13 @@ namespace boost { namespace polygon{ return polygon_set.end(); } - static inline orientation_2d orient(const view_of& polygon_set) { + static inline orientation_2d orient(const view_of& polygon_set) { return polygon_set.orient(); } - static inline bool clean(const view_of& polygon_set) { + static inline bool clean(const view_of& polygon_set) { return polygon_set.clean(); } - static inline bool sorted(const view_of& polygon_set) { + static inline bool sorted(const view_of& polygon_set) { return polygon_set.sorted(); } }; diff --git a/3party/boost/boost/polygon/polygon_45_set_data.hpp b/3party/boost/boost/polygon/polygon_45_set_data.hpp index e541ee5cbf..cf03518ab6 100644 --- a/3party/boost/boost/polygon/polygon_45_set_data.hpp +++ b/3party/boost/boost/polygon/polygon_45_set_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -19,7 +19,7 @@ namespace boost { namespace polygon{ template class polygon_45_set_view; - + struct polygon_45_set_concept {}; template @@ -43,8 +43,8 @@ namespace boost { namespace polygon{ } // copy constructor - inline polygon_45_set_data(const polygon_45_set_data& that) : - error_data_(that.error_data_), data_(that.data_), dirty_(that.dirty_), + inline polygon_45_set_data(const polygon_45_set_data& that) : + error_data_(that.error_data_), data_(that.data_), dirty_(that.dirty_), unsorted_(that.unsorted_), is_manhattan_(that.is_manhattan_) {} template @@ -123,7 +123,7 @@ namespace boost { namespace polygon{ unsorted_ = true; insert_clean(vertex_45, is_hole); } - + template inline void insert(const polygon_90_set_data& polygon_set, bool is_hole = false) { if(polygon_set.orient() == VERTICAL) { @@ -158,14 +158,14 @@ namespace boost { namespace polygon{ p.data_.insert(p.data_.end(), error_data_.begin(), error_data_.end()); } - // equivalence operator + // equivalence operator inline bool operator==(const polygon_45_set_data& p) const { clean(); p.clean(); return data_ == p.data_; } - // inequivalence operator + // inequivalence operator inline bool operator!=(const polygon_45_set_data& p) const { return !((*this) == p); } @@ -212,7 +212,7 @@ namespace boost { namespace polygon{ void sort() const{ if(unsorted_) { - gtlsort(data_.begin(), data_.end()); + polygon_sort(data_.begin(), data_.end()); unsorted_ = false; } } @@ -220,6 +220,7 @@ namespace boost { namespace polygon{ template void set(input_iterator_type input_begin, input_iterator_type input_end) { data_.clear(); + reserve(std::distance(input_begin, input_end)); insert(input_begin, input_end); dirty_ = true; unsorted_ = true; @@ -232,7 +233,7 @@ namespace boost { namespace polygon{ } void set(const value_type& value) { - data_ = value; + data_ = value; dirty_ = true; unsorted_ = true; } @@ -242,13 +243,13 @@ namespace boost { namespace polygon{ void get_polygons(cT& container) const { get_dispatch(container, polygon_45_concept()); } - + // append to the container cT with PolygonWithHoles objects template void get_polygons_with_holes(cT& container) const { get_dispatch(container, polygon_45_with_holes_concept()); } - + // append to the container cT with polygons of three or four verticies // slicing orientation is vertical template @@ -288,7 +289,7 @@ namespace boost { namespace polygon{ // snap verticies of set to even,even or odd,odd coordinates void snap() const; - + // |= &= += *= -= ^= binary operators polygon_45_set_data& operator|=(const polygon_45_set_data& b); polygon_45_set_data& operator&=(const polygon_45_set_data& b); @@ -300,7 +301,7 @@ namespace boost { namespace polygon{ // resizing operations polygon_45_set_data& operator+=(Unit delta); polygon_45_set_data& operator-=(Unit delta); - + // shrink the Polygon45Set by shrinking polygon_45_set_data& resize(coordinate_type resizing, RoundingOption rounding = CLOSEST, CornerOption corner = INTERSECTION); @@ -338,14 +339,14 @@ namespace boost { namespace polygon{ bool hole = false) { return insert_with_resize_dispatch(poly, resizing, rounding, corner, hole, typename geometry_concept::type()); } - + private: mutable value_type error_data_; mutable value_type data_; mutable bool dirty_; mutable bool unsorted_; mutable bool is_manhattan_; - + private: //functions template @@ -377,7 +378,7 @@ namespace boost { namespace polygon{ insert(geometry_object.begin(), geometry_object.end(), is_hole); } template - void insert_dispatch(const geometry_type& geometry_object, bool is_hole, rectangle_concept tag); + void insert_dispatch(const geometry_type& geometry_object, bool is_hole, rectangle_concept tag); template void insert_dispatch(const geometry_type& geometry_object, bool is_hole, polygon_90_concept ) { insert_vertex_sequence(begin_points(geometry_object), end_points(geometry_object), winding(geometry_object), is_hole); @@ -417,20 +418,20 @@ namespace boost { namespace polygon{ insert(pl.begin(), pl.end(), is_hole); } - void insert_vertex_half_edge_45_pair(const point_data& pt1, point_data& pt2, + void insert_vertex_half_edge_45_pair(const point_data& pt1, point_data& pt2, const point_data& pt3, direction_1d wdir); template polygon_45_set_data& insert_with_resize_dispatch(const geometry_type& poly, coordinate_type resizing, RoundingOption rounding, CornerOption corner, bool hole, polygon_45_concept tag); - + // accumulate the bloated polygon with holes template polygon_45_set_data& insert_with_resize_dispatch(const geometry_type& poly, coordinate_type resizing, RoundingOption rounding, - CornerOption corner, bool hole, polygon_45_with_holes_concept tag); - + CornerOption corner, bool hole, polygon_45_with_holes_concept tag); + static void snap_vertex_45(Vertex45Compact& vertex); public: @@ -446,7 +447,7 @@ namespace boost { namespace polygon{ struct geometry_concept > { typedef polygon_45_set_concept type; }; - + template void scale_up_vertex_45_compact_range(iT beginr, iT endr, T factor) { for( ; beginr != endr; ++beginr) { @@ -490,17 +491,17 @@ namespace boost { namespace polygon{ template bool insert_vertex_half_edge_45_pair_into_vector(cT& output, - const pT& pt1, pT& pt2, - const pT& pt3, + const pT& pt1, pT& pt2, + const pT& pt3, direction_1d wdir) { int multiplier = wdir == LOW ? -1 : 1; typename cT::value_type vertex(pt2, 0, 0); //std::cout << pt1 << " " << pt2 << " " << pt3 << std::endl; std::pair check; - check = characterizeEdge45(pt1, pt2); + check = characterizeEdge45(pt1, pt2); //std::cout << "index " << check.first << " " << check.second * -multiplier << std::endl; vertex.count[check.first] += check.second * -multiplier; - check = characterizeEdge45(pt2, pt3); + check = characterizeEdge45(pt2, pt3); //std::cout << "index " << check.first << " " << check.second * multiplier << std::endl; vertex.count[check.first] += check.second * multiplier; output.push_back(vertex); @@ -508,8 +509,8 @@ namespace boost { namespace polygon{ } template - inline void polygon_45_set_data::insert_vertex_half_edge_45_pair(const point_data& pt1, point_data& pt2, - const point_data& pt3, + inline void polygon_45_set_data::insert_vertex_half_edge_45_pair(const point_data& pt1, point_data& pt2, + const point_data& pt3, direction_1d wdir) { if(insert_vertex_half_edge_45_pair_into_vector(data_, pt1, pt2, pt3, wdir)) is_manhattan_ = false; } @@ -611,7 +612,7 @@ namespace boost { namespace polygon{ template void insert_rectangle_into_vector_45(cT& output, const rT& rect, bool is_hole) { - point_data::coordinate_type> + point_data::coordinate_type> llpt = ll(rect), lrpt = lr(rect), ulpt = ul(rect), urpt = ur(rect); direction_1d dir = COUNTERCLOCKWISE; if(is_hole) dir = CLOCKWISE; @@ -623,7 +624,7 @@ namespace boost { namespace polygon{ template template - inline void polygon_45_set_data::insert_dispatch(const geometry_type& geometry_object, + inline void polygon_45_set_data::insert_dispatch(const geometry_type& geometry_object, bool is_hole, rectangle_concept ) { dirty_ = true; unsorted_ = true; @@ -640,7 +641,7 @@ namespace boost { namespace polygon{ } Unit low = (std::numeric_limits::max)(); Unit high = (std::numeric_limits::min)(); - interval_data xivl(low, high); + interval_data xivl(low, high); interval_data yivl(low, high); for(typename value_type::const_iterator itr = data_.begin(); itr != data_.end(); ++ itr) { @@ -714,7 +715,7 @@ namespace boost { namespace polygon{ inline polygon_45_set_data& polygon_45_set_data::operator-=(const polygon_45_set_data& b) { //b.sort(); //sort(); - applyAdaptiveBoolean_<2>(b); + applyAdaptiveBoolean_<2>(b); dirty_ = false; unsorted_ = false; return *this; @@ -723,7 +724,7 @@ namespace boost { namespace polygon{ inline polygon_45_set_data& polygon_45_set_data::operator^=(const polygon_45_set_data& b) { //b.sort(); //sort(); - applyAdaptiveBoolean_<3>(b); + applyAdaptiveBoolean_<3>(b); dirty_ = false; unsorted_ = false; return *this; @@ -739,7 +740,7 @@ namespace boost { namespace polygon{ } template - inline polygon_45_set_data& + inline polygon_45_set_data& polygon_45_set_data::resize(Unit resizing, RoundingOption rounding, CornerOption corner) { if(resizing == 0) return *this; std::list > pl; @@ -852,7 +853,7 @@ namespace boost { namespace polygon{ Unit y = 0; if(run1 == 0) { x = pt1.x(); - y = (Unit)(((x1 - x2) * rise2) / run2) + pt2.y(); + y = (Unit)(((x1 - x2) * rise2) / run2) + pt2.y(); } else if(run2 == 0) { x = pt2.x(); y = (Unit)(((x2 - x1) * rise1) / run1) + pt1.y(); @@ -863,7 +864,7 @@ namespace boost { namespace polygon{ // (rise1/run1 - rise2/run2)x = y2 - y1 + rise1/run1 x1 - rise2/run2 x2 // x = (y2 - y1 + rise1/run1 x1 - rise2/run2 x2)/(rise1/run1 - rise2/run2) // x = (y2 - y1 + rise1/run1 x1 - rise2/run2 x2)(rise1 run2 - rise2 run1)/(run1 run2) - x = (Unit)((y2 - y1 + ((rise1 * x1) / run1) - ((rise2 * x2) / run2)) * + x = (Unit)((y2 - y1 + ((rise1 * x1) / run1) - ((rise2 * x2) / run2)) * (run1 * run2) / (rise1 * run2 - rise2 * run1)); if(rise1 == 0) { y = pt1.y(); @@ -873,7 +874,7 @@ namespace boost { namespace polygon{ // y - y1 = (rise1/run1)(x - x1) // (run1/rise1)(y - y1) = x - x1 // x = (run1/rise1)(y - y1) + x1 = (run2/rise2)(y - y2) + x2 - y = (Unit)((x2 - x1 + ((run1 * y1) / rise1) - ((run2 * y2) / rise2)) * + y = (Unit)((x2 - x1 + ((run1 * y1) / rise1) - ((run2 * y2) / rise2)) * (rise1 * rise2) / (run1 * rise2 - run2 * rise1)); } } @@ -882,7 +883,7 @@ namespace boost { namespace polygon{ template inline - void handleResizingEdge45_SQRT1OVER2(polygon_45_set_data& sizingSet, point_data first, + void handleResizingEdge45_SQRT1OVER2(polygon_45_set_data& sizingSet, point_data first, point_data second, Unit resizing, CornerOption corner) { if(first.x() == second.x()) { sizingSet.insert(rectangle_data(first.x() - resizing, first.y(), first.x() + resizing, second.y())); @@ -932,7 +933,7 @@ namespace boost { namespace polygon{ template inline - void handleResizingEdge45(polygon_45_set_data& sizingSet, point_data first, + void handleResizingEdge45(polygon_45_set_data& sizingSet, point_data first, point_data second, Unit resizing, RoundingOption rounding) { if(first.x() == second.x()) { sizingSet.insert(rectangle_data(first.x() - resizing, first.y(), first.x() + resizing, second.y())); @@ -998,14 +999,14 @@ namespace boost { namespace polygon{ template inline - void handleResizingVertex45(polygon_45_set_data& sizingSet, const point_data& first, - const point_data& second, const point_data& third, Unit resizing, - RoundingOption rounding, CornerOption corner, + void handleResizingVertex45(polygon_45_set_data& sizingSet, const point_data& first, + const point_data& second, const point_data& third, Unit resizing, + RoundingOption rounding, CornerOption corner, int multiplier) { unsigned int edge1 = getEdge45Direction(first, second); unsigned int edge2 = getEdge45Direction(second, third); unsigned int diffAngle; - if(multiplier < 0) + if(multiplier < 0) diffAngle = (edge2 + 8 - edge1) % 8; else diffAngle = (edge1 + 8 - edge2) % 8; @@ -1015,7 +1016,7 @@ namespace boost { namespace polygon{ } Unit bloating = abs(resizing); if(rounding == SQRT1OVER2) { - if(edge1 % 2 && edge2 % 2) return; + if(edge1 % 2 && edge2 % 2) return; if(corner == ORTHOGONAL && edge1 % 2 == 0 && edge2 % 2 == 0) { rectangle_data insertion_rect; set_points(insertion_rect, second, second); @@ -1074,7 +1075,7 @@ namespace boost { namespace polygon{ sizingSet.insert(insertion_rect); return; } - } + } std::vector > pts; pts.push_back(edgePoint1); pts.push_back(second); @@ -1086,15 +1087,15 @@ namespace boost { namespace polygon{ template template - inline polygon_45_set_data& + inline polygon_45_set_data& polygon_45_set_data::insert_with_resize_dispatch(const geometry_type& poly, - coordinate_type resizing, + coordinate_type resizing, RoundingOption rounding, CornerOption corner, bool hole, polygon_45_concept ) { direction_1d wdir = winding(poly); int multiplier = wdir == LOW ? -1 : 1; - if(hole) resizing *= -1; + if(hole) resizing *= -1; typedef typename polygon_45_data::iterator_type piterator; piterator first, second, third, end, real_end; real_end = end_points(poly); @@ -1113,8 +1114,8 @@ namespace boost { namespace polygon{ handleResizingEdge45(sizingSet, *first, *second, resizing, rounding); } else { handleResizingEdge45_SQRT1OVER2(sizingSet, *first, *second, resizing, corner); - } - if(corner != UNFILLED) + } + if(corner != UNFILLED) handleResizingVertex45(sizingSet, *first, *second, *third, resizing, rounding, corner, multiplier); first = second; second = third; @@ -1144,9 +1145,9 @@ namespace boost { namespace polygon{ template inline polygon_45_set_data& polygon_45_set_data::insert_with_resize_dispatch(const geometry_type& poly, - coordinate_type resizing, + coordinate_type resizing, RoundingOption rounding, - CornerOption corner, + CornerOption corner, bool hole, polygon_45_with_holes_concept ) { insert_with_resize_dispatch(poly, resizing, rounding, corner, hole, polygon_45_concept()); for(typename polygon_with_holes_traits::iterator_holes_type itr = @@ -1170,11 +1171,11 @@ namespace boost { namespace polygon{ } clear(); insert(polys.begin(), polys.end()); - dirty_ = true; + dirty_ = true; unsorted_ = true; return *this; } - + template inline polygon_45_set_data& polygon_45_set_data::scale_up(typename coordinate_traits::unsigned_area_type factor) { scale_up_vertex_45_compact_range(data_.begin(), data_.end(), factor); @@ -1192,7 +1193,7 @@ namespace boost { namespace polygon{ } clear(); insert(polys.begin(), polys.end()); - dirty_ = true; + dirty_ = true; unsorted_ = true; return *this; } @@ -1208,7 +1209,7 @@ namespace boost { namespace polygon{ } clear(); insert(polys.begin(), polys.end()); - dirty_ = true; + dirty_ = true; unsorted_ = true; return *this; } @@ -1244,7 +1245,7 @@ namespace boost { namespace polygon{ typename boolean_op_45::template Scan45::Count2, typename boolean_op_45::template boolean_op_45_output_functor > scan45; std::vector::Vertex45> eventOut; - typedef std::pair::Point, + typedef std::pair::Point, typename boolean_op_45::template Scan45CountT::Count2> > Scan45Vertex; std::vector eventIn; typedef std::vector::Vertex45Compact> value_type; @@ -1262,7 +1263,7 @@ namespace boost { namespace polygon{ //std::cout << "SCAN " << currentX << "\n"; //scan event scan45.scan(eventOut, eventIn.begin(), eventIn.end()); - gtlsort(eventOut.begin(), eventOut.end()); + polygon_sort(eventOut.begin(), eventOut.end()); std::size_t ptCount = 0; for(std::size_t i = 0; i < eventOut.size(); ++i) { if(!result_data.empty() && @@ -1270,7 +1271,7 @@ namespace boost { namespace polygon{ result_data.back().count += eventOut[i]; ++ptCount; } else { - if(!result_data.empty()) { + if(!result_data.empty()) { if(result_data.back().count.is_45()) { result_is_manhattan_ = false; } @@ -1290,24 +1291,24 @@ namespace boost { namespace polygon{ x = currentX; } //std::cout << "get next\n"; - if(iter2 != end2 && (iter1 == end1 || iter2->pt.x() < iter1->pt.x() || + if(iter2 != end2 && (iter1 == end1 || iter2->pt.x() < iter1->pt.x() || (iter2->pt.x() == iter1->pt.x() && iter2->pt.y() < iter1->pt.y()) )) { //std::cout << "case1 next\n"; eventIn.push_back(Scan45Vertex - (iter2->pt, + (iter2->pt, typename polygon_45_formation:: Scan45Count(typename polygon_45_formation::Count2(0, iter2->count[0]), typename polygon_45_formation::Count2(0, iter2->count[1]), typename polygon_45_formation::Count2(0, iter2->count[2]), typename polygon_45_formation::Count2(0, iter2->count[3])))); ++iter2; - } else if(iter1 != end1 && (iter2 == end2 || iter1->pt.x() < iter2->pt.x() || + } else if(iter1 != end1 && (iter2 == end2 || iter1->pt.x() < iter2->pt.x() || (iter1->pt.x() == iter2->pt.x() && iter1->pt.y() < iter2->pt.y()) )) { //std::cout << "case2 next\n"; eventIn.push_back(Scan45Vertex - (iter1->pt, + (iter1->pt, typename polygon_45_formation:: Scan45Count( typename polygon_45_formation::Count2(iter1->count[0], 0), @@ -1318,22 +1319,22 @@ namespace boost { namespace polygon{ } else { //std::cout << "case3 next\n"; eventIn.push_back(Scan45Vertex - (iter2->pt, + (iter2->pt, typename polygon_45_formation:: - Scan45Count(typename polygon_45_formation::Count2(iter1->count[0], + Scan45Count(typename polygon_45_formation::Count2(iter1->count[0], iter2->count[0]), - typename polygon_45_formation::Count2(iter1->count[1], + typename polygon_45_formation::Count2(iter1->count[1], iter2->count[1]), - typename polygon_45_formation::Count2(iter1->count[2], + typename polygon_45_formation::Count2(iter1->count[2], iter2->count[2]), - typename polygon_45_formation::Count2(iter1->count[3], + typename polygon_45_formation::Count2(iter1->count[3], iter2->count[3])))); ++iter1; ++iter2; } } scan45.scan(eventOut, eventIn.begin(), eventIn.end()); - gtlsort(eventOut.begin(), eventOut.end()); + polygon_sort(eventOut.begin(), eventOut.end()); std::size_t ptCount = 0; for(std::size_t i = 0; i < eventOut.size(); ++i) { @@ -1342,7 +1343,7 @@ namespace boost { namespace polygon{ result_data.back().count += eventOut[i]; ++ptCount; } else { - if(!result_data.empty()) { + if(!result_data.empty()) { if(result_data.back().count.is_45()) { result_is_manhattan_ = false; } @@ -1385,7 +1386,7 @@ namespace boost { namespace polygon{ //std::cout << "SCAN " << currentX << "\n"; //scan event scan45.scan(eventOut, eventIn.begin(), eventIn.end()); - gtlsort(eventOut.begin(), eventOut.end()); + polygon_sort(eventOut.begin(), eventOut.end()); std::size_t ptCount = 0; for(std::size_t i = 0; i < eventOut.size(); ++i) { if(!result_data.empty() && @@ -1393,7 +1394,7 @@ namespace boost { namespace polygon{ result_data.back().count += eventOut[i]; ++ptCount; } else { - if(!result_data.empty()) { + if(!result_data.empty()) { if(result_data.back().count.is_45()) { result_is_manhattan_ = false; } @@ -1414,7 +1415,7 @@ namespace boost { namespace polygon{ } //std::cout << "get next\n"; eventIn.push_back(Scan45Vertex - (iter1->pt, + (iter1->pt, Scan45Count( typename boolean_op_45::Count1(iter1->count[0]), typename boolean_op_45::Count1(iter1->count[1]), typename boolean_op_45::Count1(iter1->count[2]), @@ -1422,7 +1423,7 @@ namespace boost { namespace polygon{ ++iter1; } scan45.scan(eventOut, eventIn.begin(), eventIn.end()); - gtlsort(eventOut.begin(), eventOut.end()); + polygon_sort(eventOut.begin(), eventOut.end()); std::size_t ptCount = 0; for(std::size_t i = 0; i < eventOut.size(); ++i) { @@ -1431,7 +1432,7 @@ namespace boost { namespace polygon{ result_data.back().count += eventOut[i]; ++ptCount; } else { - if(!result_data.empty()) { + if(!result_data.empty()) { if(result_data.back().count.is_45()) { result_is_manhattan_ = false; } @@ -1453,9 +1454,9 @@ namespace boost { namespace polygon{ return result_is_manhattan_; } - template + template void get_error_rects_shell(cT& posE, cT& negE, iT beginr, iT endr) { - typedef typename iT::value_type Point; + typedef typename std::iterator_traits::value_type Point; typedef typename point_traits::coordinate_type Unit; typedef typename coordinate_traits::area_type area_type; Point pt1, pt2, pt3; @@ -1493,7 +1494,7 @@ namespace boost { namespace polygon{ const Point& pt = *beginr; pt3 = pt; ++beginr; - if(beginr == endr) { + if(beginr == endr) { next_to_last = true; //skip last point equal to first continue; @@ -1508,7 +1509,7 @@ namespace boost { namespace polygon{ if(dir == CLOCKWISE) { posE.push_back(rectangle_data (x(pt2) - 1, y(pt2) - 1, x(pt2) + 1, y(pt2) + 1)); - + } else { negE.push_back(rectangle_data (x(pt2) - 1, y(pt2) - 1, x(pt2) + 1, y(pt2) + 1)); @@ -1518,8 +1519,8 @@ namespace boost { namespace polygon{ pt2 = pt3; } } - - template + + template void get_error_rects(cT& posE, cT& negE, const pT& p) { get_error_rects_shell(posE, negE, p.begin(), p.end()); for(typename pT::iterator_holes_type iHb = p.begin_holes(); @@ -1554,16 +1555,16 @@ namespace boost { namespace polygon{ #endif if(op == 0) { output.applyBooleanBinaryOp(l90sd.begin(), l90sd.end(), - r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); + r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); } else if (op == 1) { output.applyBooleanBinaryOp(l90sd.begin(), l90sd.end(), - r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); + r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); } else if (op == 2) { output.applyBooleanBinaryOp(l90sd.begin(), l90sd.end(), - r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); + r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); } else if (op == 3) { output.applyBooleanBinaryOp(l90sd.begin(), l90sd.end(), - r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); + r90sd.begin(), r90sd.end(), boolean_op::BinaryCount()); } #ifdef BOOST_POLYGON_MSVC #pragma warning (default: 4127) @@ -1590,7 +1591,7 @@ namespace boost { namespace polygon{ lvalue_data.reserve(data_.size()); for(std::size_t i = 0 ; i < data_.size(); ++i) { const Vertex45Compact& vi = data_[i]; - Vertex45Compact2 ci; + Vertex45Compact2 ci; ci.pt = point_data(x(vi.pt), y(vi.pt)); ci.count = typename polygon_45_formation::Vertex45Count ( vi.count[0], vi.count[1], vi.count[2], vi.count[3]); @@ -1639,7 +1640,7 @@ namespace boost { namespace polygon{ result.error_data_.push_back(ci); } Data2 new_result_data; - gtlsort(result_data.begin(), result_data.end()); + polygon_sort(result_data.begin(), result_data.end()); applyUnary45OpOnVectors(new_result_data, result_data); //OR operation result_data.swap(new_result_data); } @@ -1709,7 +1710,7 @@ namespace boost { namespace polygon{ lvalue_data.reserve(data_.size()); for(std::size_t i = 0 ; i < data_.size(); ++i) { const Vertex45Compact& vi = data_[i]; - Vertex45Compact2 ci; + Vertex45Compact2 ci; ci.pt.x(static_cast(x(vi.pt))); ci.pt.y(static_cast(y(vi.pt))); ci.count = typename polygon_45_formation::Vertex45Count @@ -1749,7 +1750,7 @@ namespace boost { namespace polygon{ result.error_data_.push_back(ci); } Data2 new_result_data; - gtlsort(result_data.begin(), result_data.end()); + polygon_sort(result_data.begin(), result_data.end()); applyUnary45OpOnVectors(new_result_data, result_data); //OR operation result_data.swap(new_result_data); } @@ -1787,11 +1788,11 @@ namespace boost { namespace polygon{ public: inline property_merge_45() : tsd_() {} inline property_merge_45(const property_merge_45& that) : tsd_(that.tsd_) {} - inline property_merge_45& operator=(const property_merge_45& that) { - tsd_ = that.tsd_; + inline property_merge_45& operator=(const property_merge_45& that) { + tsd_ = that.tsd_; return *this; } - + inline void insert(const polygon_45_set_data& ps, property_type property) { ps.clean(); polygon_45_property_merge::populateMergeSetData(tsd_, ps.begin(), ps.end(), property); @@ -1844,12 +1845,12 @@ namespace boost { namespace polygon{ inline connectivity_extraction_45() : tsd_(), nodeCount_(0) {} inline connectivity_extraction_45(const connectivity_extraction_45& that) : tsd_(that.tsd_), nodeCount_(that.nodeCount_) {} - inline connectivity_extraction_45& operator=(const connectivity_extraction_45& that) { - tsd_ = that.tsd_; + inline connectivity_extraction_45& operator=(const connectivity_extraction_45& that) { + tsd_ = that.tsd_; nodeCount_ = that.nodeCount_; {} return *this; } - + //insert a polygon set graph node, the value returned is the id of the graph node inline unsigned int insert(const polygon_45_set_data& ps) { ps.clean(); @@ -1862,7 +1863,7 @@ namespace boost { namespace polygon{ ps.insert(geoObj); return insert(ps); } - + //extract connectivity and store the edges in the graph //graph must be indexable by graph node id and the indexed value must be a std::set of //graph node id diff --git a/3party/boost/boost/polygon/polygon_45_set_traits.hpp b/3party/boost/boost/polygon/polygon_45_set_traits.hpp index cfc0f98a24..f52f57f17e 100644 --- a/3party/boost/boost/polygon/polygon_45_set_traits.hpp +++ b/3party/boost/boost/polygon/polygon_45_set_traits.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -43,13 +43,13 @@ namespace boost { namespace polygon{ typedef typename is_45_polygonal_concept::type>::type type; }; template - struct is_polygon_45_set_type > { + struct is_polygon_45_set_type > { typedef typename gtl_or< typename is_45_polygonal_concept >::type>::type, typename is_45_polygonal_concept::value_type>::type>::type>::type type; }; template - struct is_polygon_45_set_type > { + struct is_polygon_45_set_type > { typedef typename gtl_or< typename is_45_polygonal_concept >::type>::type, typename is_45_polygonal_concept::value_type>::type>::type>::type type; @@ -60,13 +60,13 @@ namespace boost { namespace polygon{ typedef typename gtl_same_type::type>::type type; }; template - struct is_mutable_polygon_45_set_type > { + struct is_mutable_polygon_45_set_type > { typedef typename gtl_or< typename gtl_same_type >::type>::type, typename is_45_polygonal_concept::value_type>::type>::type>::type type; }; template - struct is_mutable_polygon_45_set_type > { + struct is_mutable_polygon_45_set_type > { typedef typename gtl_or< typename gtl_same_type >::type>::type, typename is_45_polygonal_concept::value_type>::type>::type>::type type; @@ -94,6 +94,7 @@ namespace boost { namespace polygon{ static inline void set(std::list& polygon_set, input_iterator_type input_begin, input_iterator_type input_end) { polygon_set.clear(); polygon_45_set_data >::coordinate_type> ps; + ps.reserve(std::distance(input_begin, input_end)); ps.insert(input_begin, input_end); ps.sort(); ps.clean(); @@ -105,7 +106,10 @@ namespace boost { namespace polygon{ template static inline void set(std::vector& polygon_set, input_iterator_type input_begin, input_iterator_type input_end) { polygon_set.clear(); + size_t num_ele = std::distance(input_begin, input_end); + polygon_set.reserve(num_ele); polygon_45_set_data >::coordinate_type> ps; + ps.reserve(num_ele); ps.insert(input_begin, input_end); ps.sort(); ps.clean(); @@ -116,7 +120,7 @@ namespace boost { namespace polygon{ template struct polygon_45_set_mutable_traits > { template - static inline void set(polygon_45_set_data& polygon_set, + static inline void set(polygon_45_set_data& polygon_set, input_iterator_type input_begin, input_iterator_type input_end) { polygon_set.set(input_begin, input_end); } @@ -140,7 +144,6 @@ namespace boost { namespace polygon{ static inline bool sorted(const polygon_45_set_data& polygon_set) { polygon_set.sort(); return true; } }; -} +} } #endif - diff --git a/3party/boost/boost/polygon/polygon_45_with_holes_data.hpp b/3party/boost/boost/polygon/polygon_45_with_holes_data.hpp index 717bbd3a0a..0601bdc406 100644 --- a/3party/boost/boost/polygon/polygon_45_with_holes_data.hpp +++ b/3party/boost/boost/polygon/polygon_45_with_holes_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -18,7 +18,7 @@ public: typedef T coordinate_type; typedef typename polygon_45_data::iterator_type iterator_type; typedef typename std::list >::const_iterator iterator_holes_type; - typedef polygon_45_data hole_type; + typedef polygon_45_data hole_type; typedef typename coordinate_traits::coordinate_distance area_type; typedef point_data point_type; @@ -55,9 +55,9 @@ public: } // copy constructor (since we have dynamic memory) - inline polygon_45_with_holes_data(const polygon_45_with_holes_data& that) : self_(that.self_), + inline polygon_45_with_holes_data(const polygon_45_with_holes_data& that) : self_(that.self_), holes_(that.holes_) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline polygon_45_with_holes_data& operator=(const polygon_45_with_holes_data& that) { self_ = that.self_; @@ -80,7 +80,7 @@ public: inline std::size_t size() const { return self_.size(); - } + } // get begin iterator, returns a pointer to a const polygon inline const iterator_holes_type begin_holes() const { @@ -98,11 +98,10 @@ public: public: polygon_45_data self_; - std::list holes_; + std::list holes_; }; } } #endif - diff --git a/3party/boost/boost/polygon/polygon_90_data.hpp b/3party/boost/boost/polygon/polygon_90_data.hpp index 7e1d9695b9..1f14ed72a6 100644 --- a/3party/boost/boost/polygon/polygon_90_data.hpp +++ b/3party/boost/boost/polygon/polygon_90_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -40,7 +40,7 @@ public: // copy constructor (since we have dynamic memory) inline polygon_90_data(const polygon_90_data& that) : coords_(that.coords_) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline polygon_90_data& operator=(const polygon_90_data& that) { coords_ = that.coords_; @@ -63,18 +63,17 @@ public: // get begin iterator, returns a pointer to a const Unit inline compact_iterator_type begin_compact() const { return coords_.begin(); } - + // get end iterator, returns a pointer to a const Unit inline compact_iterator_type end_compact() const { return coords_.end(); } inline std::size_t size() const { return coords_.size(); } - + private: - std::vector coords_; + std::vector coords_; }; } } #endif - diff --git a/3party/boost/boost/polygon/polygon_90_set_concept.hpp b/3party/boost/boost/polygon/polygon_90_set_concept.hpp index 09d5eee80d..980c3e769a 100644 --- a/3party/boost/boost/polygon/polygon_90_set_concept.hpp +++ b/3party/boost/boost/polygon/polygon_90_set_concept.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -17,14 +17,14 @@ namespace boost { namespace polygon{ begin_90_set_data(const polygon_set_type& polygon_set) { return polygon_90_set_traits::begin(polygon_set); } - + template typename enable_if< typename is_polygon_90_set_type::type, typename polygon_90_set_traits::iterator_type>::type end_90_set_data(const polygon_set_type& polygon_set) { return polygon_90_set_traits::end(polygon_set); } - + template typename enable_if< typename is_polygon_90_set_type::type, orientation_2d>::type @@ -47,7 +47,7 @@ namespace boost { namespace polygon{ typename is_polygon_90_set_type::type>::type, polygon_set_type_1>::type & assign(polygon_set_type_1& lvalue, const polygon_set_type_2& rvalue) { - polygon_90_set_mutable_traits::set(lvalue, begin_90_set_data(rvalue), end_90_set_data(rvalue), + polygon_90_set_mutable_traits::set(lvalue, begin_90_set_data(rvalue), end_90_set_data(rvalue), scanline_orientation(rvalue)); return lvalue; } @@ -59,12 +59,12 @@ namespace boost { namespace polygon{ //equivalence template - typename enable_if< typename gtl_and_3< + typename enable_if< typename gtl_and_3< typename is_polygon_90_set_type::type, typename is_polygon_90_set_type::type, typename are_not_both_rectangle_concept::type, typename geometry_concept::type>::type>::type, - bool>::type + bool>::type equivalence(const polygon_set_type_1& lvalue, const polygon_set_type_2& rvalue) { polygon_90_set_data::coordinate_type> ps1; @@ -99,7 +99,7 @@ namespace boost { namespace polygon{ //get: min_rectangles max_rectangles template - typename enable_if ::type, typename gtl_same_type::coordinate_type>::getMaxCover(output, rects, scanline_orientation(polygon_set)); } - + //clear template typename enable_if< typename is_mutable_polygon_90_set_type::type, @@ -120,7 +120,7 @@ namespace boost { namespace polygon{ polygon_90_set_data::coordinate_type> ps(scanline_orientation(polygon_set)); assign(polygon_set, ps); } - + //empty template typename enable_if< typename is_mutable_polygon_90_set_type::type, @@ -132,13 +132,13 @@ namespace boost { namespace polygon{ ps.clean(); return ps.empty(); } - + //extents template typename enable_if ::type, typename is_mutable_rectangle_concept::type>::type>::type, bool>::type - extents(rectangle_type& extents_rectangle, + extents(rectangle_type& extents_rectangle, const polygon_set_type& polygon_set) { typedef typename polygon_90_set_traits::coordinate_type Unit; polygon_90_set_data ps; @@ -177,7 +177,7 @@ namespace boost { namespace polygon{ assign(polygon_set_1, ps); return polygon_set_1; } - + //self_intersect template typename enable_if< typename is_mutable_polygon_90_set_type::type, @@ -207,7 +207,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - bloat(polygon_set_type& polygon_set, + bloat(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type bloating) { return bloat(polygon_set, bloating, bloating, bloating, bloating); } @@ -250,7 +250,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - bloat(polygon_set_type& polygon_set, + bloat(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type west_bloating, typename coordinate_traits::coordinate_type>::unsigned_area_type east_bloating, typename coordinate_traits::coordinate_type>::unsigned_area_type south_bloating, @@ -267,7 +267,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - shrink(polygon_set_type& polygon_set, + shrink(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type shrinking) { return shrink(polygon_set, shrinking, shrinking, shrinking, shrinking); } @@ -310,7 +310,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - shrink(polygon_set_type& polygon_set, + shrink(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type west_shrinking, typename coordinate_traits::coordinate_type>::unsigned_area_type east_shrinking, typename coordinate_traits::coordinate_type>::unsigned_area_type south_shrinking, @@ -354,7 +354,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - grow_and(polygon_set_type& polygon_set, + grow_and(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type bloating) { return grow_and(polygon_set, bloating, bloating, bloating, bloating); } @@ -397,7 +397,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_if::type>::type, polygon_set_type>::type & - grow_and(polygon_set_type& polygon_set, + grow_and(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type west_bloating, typename coordinate_traits::coordinate_type>::unsigned_area_type east_bloating, typename coordinate_traits::coordinate_type>::unsigned_area_type south_bloating, @@ -422,7 +422,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - scale_up(polygon_set_type& polygon_set, + scale_up(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type> ::unsigned_area_type factor) { typedef typename polygon_90_set_traits::coordinate_type Unit; @@ -436,7 +436,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - scale_down(polygon_set_type& polygon_set, + scale_down(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type> ::unsigned_area_type factor) { typedef typename polygon_90_set_traits::coordinate_type Unit; @@ -450,7 +450,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - scale(polygon_set_type& polygon_set, + scale(polygon_set_type& polygon_set, const scaling_type& scaling) { typedef typename polygon_90_set_traits::coordinate_type Unit; polygon_90_set_data ps; @@ -460,24 +460,27 @@ namespace boost { namespace polygon{ return polygon_set; } + struct y_p_s_move : gtl_yes {}; + //move template - polygon_set_type& + typename enable_if< typename gtl_and::type>::type>::type, + polygon_set_type>::type & move(polygon_set_type& polygon_set, - orientation_2d orient, typename polygon_90_set_traits::coordinate_type displacement, - typename enable_if< typename is_mutable_polygon_90_set_type::type>::type * = 0) { + orientation_2d orient, typename polygon_90_set_traits::coordinate_type displacement) { if(orient == HORIZONTAL) return move(polygon_set, displacement, 0); - else + else return move(polygon_set, 0, displacement); } + struct y_p_s_move2 : gtl_yes {}; + template - polygon_set_type& - move(polygon_set_type& polygon_set, typename polygon_90_set_traits::coordinate_type x_displacement, - typename polygon_90_set_traits::coordinate_type y_displacement, - typename enable_if< typename is_mutable_polygon_90_set_type::type>::type * = 0 - ) { + typename enable_if< typename gtl_and::type>::type>::type, + polygon_set_type>::type & + move(polygon_set_type& polygon_set, typename polygon_90_set_traits::coordinate_type x_displacement, + typename polygon_90_set_traits::coordinate_type y_displacement) { typedef typename polygon_90_set_traits::coordinate_type Unit; polygon_90_set_data ps; assign(ps, polygon_set); @@ -507,7 +510,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_90_set_type::type, polygon_set_type>::type & - keep(polygon_set_type& polygon_set, + keep(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type min_area, typename coordinate_traits::coordinate_type>::unsigned_area_type max_area, typename coordinate_traits::coordinate_type>::unsigned_area_type min_width, diff --git a/3party/boost/boost/polygon/polygon_90_set_data.hpp b/3party/boost/boost/polygon/polygon_90_set_data.hpp index 151cb9d259..042c3caadd 100644 --- a/3party/boost/boost/polygon/polygon_90_set_data.hpp +++ b/3party/boost/boost/polygon/polygon_90_set_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -13,6 +13,7 @@ #include "transform.hpp" #include "interval_concept.hpp" #include "rectangle_concept.hpp" +#include "segment_concept.hpp" #include "detail/iterator_points_to_compact.hpp" #include "detail/iterator_compact_to_points.hpp" #include "polygon_traits.hpp" @@ -46,7 +47,7 @@ namespace boost { namespace polygon{ // constructor from an iterator pair over vertex data template - inline polygon_90_set_data(orientation_2d orient, iT input_begin, iT input_end) : + inline polygon_90_set_data(orientation_2d orient, iT input_begin, iT input_end) : orient_(HORIZONTAL), data_(), dirty_(false), unsorted_(false) { dirty_ = true; unsorted_ = true; @@ -54,14 +55,14 @@ namespace boost { namespace polygon{ } // copy constructor - inline polygon_90_set_data(const polygon_90_set_data& that) : + inline polygon_90_set_data(const polygon_90_set_data& that) : orient_(that.orient_), data_(that.data_), dirty_(that.dirty_), unsorted_(that.unsorted_) {} template inline polygon_90_set_data(const polygon_90_set_view& that); // copy with orientation change constructor - inline polygon_90_set_data(orientation_2d orient, const polygon_90_set_data& that) : + inline polygon_90_set_data(orientation_2d orient, const polygon_90_set_data& that) : orient_(orient), data_(), dirty_(false), unsorted_(false) { insert(that, false, that.orient_); } @@ -138,7 +139,7 @@ namespace boost { namespace polygon{ insert(begin_input, end_input, orient_); } - inline void insert(const std::pair >& vertex, bool is_hole = false, + inline void insert(const std::pair >& vertex, bool is_hole = false, orientation_2d orient = HORIZONTAL) { data_.push_back(vertex); if(orient != orient_) std::swap(data_.back().first, data_.back().second.first); @@ -190,7 +191,7 @@ namespace boost { namespace polygon{ } } - // equivalence operator + // equivalence operator inline bool operator==(const polygon_90_set_data& p) const { if(orient_ == p.orient()) { clean(); @@ -201,7 +202,7 @@ namespace boost { namespace polygon{ } } - // inequivalence operator + // inequivalence operator inline bool operator!=(const polygon_90_set_data& p) const { return !((*this) == p); } @@ -260,7 +261,7 @@ namespace boost { namespace polygon{ // value_type data; // std::swap(data, data_); // applyBooleanBinaryOp(data.begin(), data.end(), - // that.begin(), that.end(), boolean_op::BinaryCount()); + // that.begin(), that.end(), boolean_op::BinaryCount()); // return *this; // } // polygon_90_set_data& operator^=(const polygon_90_set_data& that) { @@ -269,7 +270,7 @@ namespace boost { namespace polygon{ // value_type data; // std::swap(data, data_); // applyBooleanBinaryOp(data.begin(), data.end(), - // that.begin(), that.end(), boolean_op::BinaryCount()); + // that.begin(), that.end(), boolean_op::BinaryCount()); // return *this; // } // polygon_90_set_data& operator&=(const polygon_90_set_data& that) { @@ -278,7 +279,7 @@ namespace boost { namespace polygon{ // value_type data; // std::swap(data, data_); // applyBooleanBinaryOp(data.begin(), data.end(), - // that.begin(), that.end(), boolean_op::BinaryCount()); + // that.begin(), that.end(), boolean_op::BinaryCount()); // return *this; // } // polygon_90_set_data& operator|=(const polygon_90_set_data& that) { @@ -296,7 +297,7 @@ namespace boost { namespace polygon{ void sort() const{ if(unsorted_) { - gtlsort(data_.begin(), data_.end()); + polygon_sort(data_.begin(), data_.end()); unsorted_ = false; } } @@ -304,6 +305,7 @@ namespace boost { namespace polygon{ template void set(input_iterator_type input_begin, input_iterator_type input_end, orientation_2d orient) { data_.clear(); + reserve(std::distance(input_begin, input_end)); data_.insert(data_.end(), input_begin, input_end); orient_ = orient; dirty_ = true; @@ -311,7 +313,7 @@ namespace boost { namespace polygon{ } void set(const value_type& value, orientation_2d orient) { - data_ = value; + data_ = value; orient_ = orient; dirty_ = true; unsorted_ = true; @@ -345,11 +347,11 @@ namespace boost { namespace polygon{ typename coordinate_traits::unsigned_area_type north_bloating) { std::vector > rects; clean(); - rects.reserve(data_.size() / 2); + rects.reserve(data_.size() / 2); get(rects); - rectangle_data convolutionRectangle(interval_data(-((coordinate_type)west_bloating), + rectangle_data convolutionRectangle(interval_data(-((coordinate_type)west_bloating), (coordinate_type)east_bloating), - interval_data(-((coordinate_type)south_bloating), + interval_data(-((coordinate_type)south_bloating), (coordinate_type)north_bloating)); for(typename std::vector >::iterator itr = rects.begin(); itr != rects.end(); ++itr) { @@ -392,7 +394,7 @@ namespace boost { namespace polygon{ if(nyg) pt.x(current_pt.x() + east_bloating); } - static void resize_poly_up(std::vector >& poly, + static void resize_poly_up(std::vector >& poly, coordinate_type west_bloating, coordinate_type east_bloating, coordinate_type south_bloating, @@ -415,7 +417,7 @@ namespace boost { namespace polygon{ modify_pt(poly[0], prev_pt, current_pt, next_pt, west_bloating, east_bloating, south_bloating, north_bloating); remove_colinear_pts(poly); } - static bool resize_poly_down(std::vector >& poly, + static bool resize_poly_down(std::vector >& poly, coordinate_type west_shrinking, coordinate_type east_shrinking, coordinate_type south_shrinking, @@ -427,7 +429,7 @@ namespace boost { namespace polygon{ point_data prev_pt = poly[0]; point_data current_pt = poly[1]; encompass(extents_rectangle, current_pt); - for(int i = 2; i < poly.size(); ++i) { + for(std::size_t i = 2; i < poly.size(); ++i) { point_data next_pt = poly[i]; encompass(extents_rectangle, next_pt); modify_pt(poly[i-1], prev_pt, current_pt, next_pt, west_shrinking, east_shrinking, south_shrinking, north_shrinking); @@ -451,7 +453,7 @@ namespace boost { namespace polygon{ bool found_colinear = true; while(found_colinear && poly.size() >= 4) { found_colinear = false; - typename std::vector >::iterator itr = poly.begin(); + typename std::vector >::iterator itr = poly.begin(); itr += poly.size() - 1; //get last element position typename std::vector >::iterator itr2 = poly.begin(); typename std::vector >::iterator itr3 = itr2; @@ -477,7 +479,7 @@ namespace boost { namespace polygon{ poly.erase(poly.end() - count, poly.end()); } return poly.size() >= 4; - } + } polygon_90_set_data& bloat(typename coordinate_traits::unsigned_area_type west_bloating, @@ -493,9 +495,10 @@ namespace boost { namespace polygon{ //psref.insert(view_as((*itr).self_)); //rectangle_data prerect; //psref.extents(prerect); - resize_poly_up((*itr).self_.coords_, west_bloating, east_bloating, south_bloating, north_bloating); + resize_poly_up((*itr).self_.coords_, (coordinate_type)west_bloating, (coordinate_type)east_bloating, + (coordinate_type)south_bloating, (coordinate_type)north_bloating); iterator_geometry_to_set > > - begin_input(view_as((*itr).self_), LOW, orient_, false, true, COUNTERCLOCKWISE), + begin_input(view_as((*itr).self_), LOW, orient_, false, true, COUNTERCLOCKWISE), end_input(view_as((*itr).self_), HIGH, orient_, false, true, COUNTERCLOCKWISE); insert(begin_input, end_input, orient_); //polygon_90_set_data pstest; @@ -512,15 +515,16 @@ namespace boost { namespace polygon{ //psrefhole.insert(prerect); //psrefhole.insert(view_as(*itrh), true); //polygon_45_data testpoly(*itrh); - if(resize_poly_down((*itrh).coords_, west_bloating, east_bloating, south_bloating, north_bloating)) { + if(resize_poly_down((*itrh).coords_,(coordinate_type)west_bloating, (coordinate_type)east_bloating, + (coordinate_type)south_bloating, (coordinate_type)north_bloating)) { iterator_geometry_to_set > > - begin_input2(view_as(*itrh), LOW, orient_, true, true), + begin_input2(view_as(*itrh), LOW, orient_, true, true), end_input2(view_as(*itrh), HIGH, orient_, true, true); insert(begin_input2, end_input2, orient_); //polygon_90_set_data pstesthole; //pstesthole.insert(rect); //iterator_geometry_to_set > > - // begin_input2(view_as(*itrh), LOW, orient_, true, true); + // begin_input2(view_as(*itrh), LOW, orient_, true, true); //pstesthole.insert(begin_input2, end_input, orient_); //psrefhole.bloat2(west_bloating, east_bloating, south_bloating, north_bloating); //if(!equivalence(psrefhole, pstesthole)) { @@ -556,13 +560,14 @@ namespace boost { namespace polygon{ //rectangle_data prerect; //psref.extents(prerect); //polygon_45_data testpoly((*itr).self_); - if(resize_poly_down((*itr).self_.coords_, -west_shrinking, -east_shrinking, -south_shrinking, -north_shrinking)) { + if(resize_poly_down((*itr).self_.coords_, -(coordinate_type)west_shrinking, -(coordinate_type)east_shrinking, + -(coordinate_type)south_shrinking, -(coordinate_type)north_shrinking)) { iterator_geometry_to_set > > - begin_input(view_as((*itr).self_), LOW, orient_, false, true, COUNTERCLOCKWISE), + begin_input(view_as((*itr).self_), LOW, orient_, false, true, COUNTERCLOCKWISE), end_input(view_as((*itr).self_), HIGH, orient_, false, true, COUNTERCLOCKWISE); insert(begin_input, end_input, orient_); //iterator_geometry_to_set > > - // begin_input2(view_as((*itr).self_), LOW, orient_, false, true, COUNTERCLOCKWISE); + // begin_input2(view_as((*itr).self_), LOW, orient_, false, true, COUNTERCLOCKWISE); //polygon_90_set_data pstest; //pstest.insert(begin_input2, end_input, orient_); //psref.shrink2(west_shrinking, east_shrinking, south_shrinking, north_shrinking); @@ -577,15 +582,16 @@ namespace boost { namespace polygon{ //psrefhole.insert(prerect); //psrefhole.insert(view_as(*itrh), true); //polygon_45_data testpoly(*itrh); - resize_poly_up((*itrh).coords_, -west_shrinking, -east_shrinking, -south_shrinking, -north_shrinking); + resize_poly_up((*itrh).coords_, -(coordinate_type)west_shrinking, -(coordinate_type)east_shrinking, + -(coordinate_type)south_shrinking, -(coordinate_type)north_shrinking); iterator_geometry_to_set > > - begin_input2(view_as(*itrh), LOW, orient_, true, true), + begin_input2(view_as(*itrh), LOW, orient_, true, true), end_input2(view_as(*itrh), HIGH, orient_, true, true); insert(begin_input2, end_input2, orient_); //polygon_90_set_data pstesthole; //pstesthole.insert(rect); //iterator_geometry_to_set > > - // begin_input2(view_as(*itrh), LOW, orient_, true, true); + // begin_input2(view_as(*itrh), LOW, orient_, true, true); //pstesthole.insert(begin_input2, end_input, orient_); //psrefhole.shrink2(west_shrinking, east_shrinking, south_shrinking, north_shrinking); //if(!equivalence(psrefhole, pstesthole)) { @@ -618,13 +624,13 @@ namespace boost { namespace polygon{ insert(externalBoundary, true); //note that the set is in a dirty state now sort(); //does not apply implicit OR operation std::vector > rects; - rects.reserve(data_.size() / 2); + rects.reserve(data_.size() / 2); //begin does not apply implicit or operation, this is a dirty range form_rectangles(rects, data_.begin(), data_.end(), orient_, rectangle_concept()); clear(); - rectangle_data convolutionRectangle(interval_data(-((coordinate_type)east_shrinking), + rectangle_data convolutionRectangle(interval_data(-((coordinate_type)east_shrinking), (coordinate_type)west_shrinking), - interval_data(-((coordinate_type)north_shrinking), + interval_data(-((coordinate_type)north_shrinking), (coordinate_type)south_shrinking)); for(typename std::vector >::iterator itr = rects.begin(); itr != rects.end(); ++itr) { @@ -663,10 +669,10 @@ namespace boost { namespace polygon{ } polygon_90_set_data& - resize(coordinate_type west, coordinate_type east, coordinate_type south, coordinate_type north); + resize(coordinate_type west, coordinate_type east, coordinate_type south, coordinate_type north); polygon_90_set_data& move(coordinate_type x_delta, coordinate_type y_delta) { - for(typename std::vector > >::iterator + for(typename std::vector > >::iterator itr = data_.begin(); itr != data_.end(); ++itr) { if(orient_ == orientation_2d(VERTICAL)) { (*itr).first += x_delta; @@ -701,7 +707,7 @@ namespace boost { namespace polygon{ // scale set polygon_90_set_data& scale_up(typename coordinate_traits::unsigned_area_type factor) { - for(typename std::vector > >::iterator + for(typename std::vector > >::iterator itr = data_.begin(); itr != data_.end(); ++itr) { (*itr).first *= (coordinate_type)factor; (*itr).second.first *= (coordinate_type)factor; @@ -710,7 +716,7 @@ namespace boost { namespace polygon{ } polygon_90_set_data& scale_down(typename coordinate_traits::unsigned_area_type factor) { typedef typename coordinate_traits::coordinate_distance dt; - for(typename std::vector > >::iterator + for(typename std::vector > >::iterator itr = data_.begin(); itr != data_.end(); ++itr) { (*itr).first = scaling_policy::round((dt)((*itr).first) / (dt)factor); (*itr).second.first = scaling_policy::round((dt)((*itr).second.first) / (dt)factor); @@ -720,7 +726,7 @@ namespace boost { namespace polygon{ } template polygon_90_set_data& scale(const anisotropic_scale_factor& scaling) { - for(typename std::vector > >::iterator + for(typename std::vector > >::iterator itr = data_.begin(); itr != data_.end(); ++itr) { if(orient_ == orientation_2d(VERTICAL)) { scaling.scale((*itr).first, (*itr).second.first); @@ -733,7 +739,7 @@ namespace boost { namespace polygon{ } template polygon_90_set_data& scale_with(const scaling_type& scaling) { - for(typename std::vector > >::iterator + for(typename std::vector > >::iterator itr = data_.begin(); itr != data_.end(); ++itr) { if(orient_ == orientation_2d(VERTICAL)) { scaling.scale((*itr).first, (*itr).second.first); @@ -746,7 +752,7 @@ namespace boost { namespace polygon{ } polygon_90_set_data& scale(double factor) { typedef typename coordinate_traits::coordinate_distance dt; - for(typename std::vector > >::iterator + for(typename std::vector > >::iterator itr = data_.begin(); itr != data_.end(); ++itr) { (*itr).first = scaling_policy::round((dt)((*itr).first) * (dt)factor); (*itr).second.first = scaling_policy::round((dt)((*itr).second.first) * (dt)factor); @@ -812,7 +818,7 @@ namespace boost { namespace polygon{ mutable value_type data_; mutable bool dirty_; mutable bool unsorted_; - + private: //functions template @@ -882,7 +888,7 @@ namespace boost { namespace polygon{ return bloat(0, e_total, 0, n_total); } } - + template class property_merge_90 { private: @@ -905,7 +911,7 @@ namespace boost { namespace polygon{ //with unique sets of merged properties to polygons sets in a map keyed by sets of properties // T = std::map, polygon_90_set_data > or // T = std::map, polygon_90_set_data > - template + template inline void merge(ResultType& result) { merge_scanline, typename ResultType::key_type> ms; ms.perform_merge(result, pmd_); @@ -924,12 +930,12 @@ namespace boost { namespace polygon{ inline connectivity_extraction_90() : tsd_(), nodeCount_(0) {} inline connectivity_extraction_90(const connectivity_extraction_90& that) : tsd_(that.tsd_), nodeCount_(that.nodeCount_) {} - inline connectivity_extraction_90& operator=(const connectivity_extraction_90& that) { - tsd_ = that.tsd_; + inline connectivity_extraction_90& operator=(const connectivity_extraction_90& that) { + tsd_ = that.tsd_; nodeCount_ = that.nodeCount_; {} return *this; } - + //insert a polygon set graph node, the value returned is the id of the graph node inline unsigned int insert(const polygon_90_set_data& ps) { ps.clean(); @@ -942,7 +948,7 @@ namespace boost { namespace polygon{ ps.insert(geoObj); return insert(ps); } - + //extract connectivity and store the edges in the graph //graph must be indexable by graph node id and the indexed value must be a std::set of //graph node id @@ -954,4 +960,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/polygon_90_set_traits.hpp b/3party/boost/boost/polygon/polygon_90_set_traits.hpp index 18e632973c..debcf57149 100644 --- a/3party/boost/boost/polygon/polygon_90_set_traits.hpp +++ b/3party/boost/boost/polygon/polygon_90_set_traits.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -24,6 +24,8 @@ namespace boost { namespace polygon{ template struct traits_by_concept { typedef rectangle_traits type; }; template + struct traits_by_concept { typedef segment_traits type; }; + template struct traits_by_concept { typedef polygon_traits type; }; template struct traits_by_concept { typedef polygon_traits type; }; @@ -63,7 +65,7 @@ namespace boost { namespace polygon{ typedef typename traits_type::coordinate_type type; }; template - struct get_coordinate_type { + struct get_coordinate_type { typedef typename get_coordinate_type_2::value_type, typename geometry_concept struct get_iterator_type_2 { - typedef const T* type; + typedef const T* type; static type begin(const T& t) { return &t; } static type end(const T& t) { const T* tp = &t; ++tp; return tp; } }; @@ -88,7 +90,7 @@ namespace boost { namespace polygon{ static type begin(const T& t) { return t.begin(); } static type end(const T& t) { return t.end(); } }; - + // //helpers for allowing polygon 45 and containers of polygon 45 to behave interchangably in polygon_45_set_traits // template // struct get_coordinate_type_45 {}; @@ -109,25 +111,25 @@ namespace boost { namespace polygon{ // struct get_iterator_type_45 {}; // template // struct get_iterator_type_45 { -// typedef typename T::const_iterator type; +// typedef typename T::const_iterator type; // static type begin(const T& t) { return t.begin(); } // static type end(const T& t) { return t.end(); } // }; // template -// struct get_iterator_type_45 { -// typedef const T* type; +// struct get_iterator_type_45 { +// typedef const T* type; // static type begin(const T& t) { return &t; } // static type end(const T& t) { const T* tp = &t; ++tp; return tp; } // }; // template -// struct get_iterator_type_45 { -// typedef const T* type; +// struct get_iterator_type_45 { +// typedef const T* type; // static type begin(const T& t) { return &t; } // static type end(const T& t) { const T* tp = &t; ++tp; return tp; } // }; // template -// struct get_iterator_type_45 { -// typedef const T* type; +// struct get_iterator_type_45 { +// typedef const T* type; // static type begin(const T& t) { return &t; } // static type end(const T& t) { const T* tp = &t; ++tp; return tp; } // }; @@ -170,13 +172,13 @@ namespace boost { namespace polygon{ typedef typename is_manhattan_polygonal_concept::type>::type type; }; template - struct is_polygon_90_set_type > { + struct is_polygon_90_set_type > { typedef typename gtl_or< typename is_manhattan_polygonal_concept >::type>::type, typename is_manhattan_polygonal_concept::value_type>::type>::type>::type type; }; template - struct is_polygon_90_set_type > { + struct is_polygon_90_set_type > { typedef typename gtl_or< typename is_manhattan_polygonal_concept >::type>::type, typename is_manhattan_polygonal_concept::value_type>::type>::type>::type type; @@ -187,15 +189,15 @@ namespace boost { namespace polygon{ typedef typename gtl_same_type::type>::type type; }; template - struct is_mutable_polygon_90_set_type > { + struct is_mutable_polygon_90_set_type > { typedef typename gtl_or< - typename gtl_same_type >::type>::type, + typename gtl_same_type >::type>::type, typename is_manhattan_polygonal_concept::value_type>::type>::type>::type type; }; template - struct is_mutable_polygon_90_set_type > { + struct is_mutable_polygon_90_set_type > { typedef typename gtl_or< - typename gtl_same_type >::type>::type, + typename gtl_same_type >::type>::type, typename is_manhattan_polygonal_concept::value_type>::type>::type>::type type; }; @@ -278,6 +280,7 @@ namespace boost { namespace polygon{ static inline void set(std::list& polygon_set, input_iterator_type input_begin, input_iterator_type input_end, orientation_2d orient) { polygon_set.clear(); polygon_90_set_data >::coordinate_type> ps(orient); + ps.reserve(std::distance(input_begin, input_end)); ps.insert(input_begin, input_end, orient); ps.clean(); get_90_dispatch(polygon_set, ps, orient, concept_type()); @@ -289,7 +292,10 @@ namespace boost { namespace polygon{ template static inline void set(std::vector& polygon_set, input_iterator_type input_begin, input_iterator_type input_end, orientation_2d orient) { polygon_set.clear(); + size_t num_ele = std::distance(input_begin, input_end); + polygon_set.reserve(num_ele); polygon_90_set_data >::coordinate_type> ps(orient); + ps.reserve(num_ele); ps.insert(input_begin, input_end, orient); ps.clean(); get_90_dispatch(polygon_set, ps, orient, concept_type()); @@ -300,10 +306,11 @@ namespace boost { namespace polygon{ struct polygon_90_set_mutable_traits > { template - static inline void set(polygon_90_set_data& polygon_set, - input_iterator_type input_begin, input_iterator_type input_end, + static inline void set(polygon_90_set_data& polygon_set, + input_iterator_type input_begin, input_iterator_type input_end, orientation_2d orient) { polygon_set.clear(); + polygon_set.reserve(std::distance(input_begin, input_end)); polygon_set.insert(input_begin, input_end, orient); } @@ -341,15 +348,15 @@ namespace boost { namespace polygon{ struct is_polygon_90_set_concept { typedef gtl_yes type; }; template <> struct is_polygon_90_set_concept { typedef gtl_yes type; }; - + template struct is_mutable_polygon_90_set_concept { typedef gtl_no type; }; template <> struct is_mutable_polygon_90_set_concept { typedef gtl_yes type; }; - + template struct geometry_concept > { typedef polygon_90_set_concept type; }; - + //template //typename enable_if::type, void>::type //print_is_polygon_90_set_concept(const T& t) { std::cout << "is polygon 90 set concept\n"; } @@ -359,4 +366,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/polygon_90_with_holes_data.hpp b/3party/boost/boost/polygon/polygon_90_with_holes_data.hpp index 2fb6cdb9f2..be43b6582e 100644 --- a/3party/boost/boost/polygon/polygon_90_with_holes_data.hpp +++ b/3party/boost/boost/polygon/polygon_90_with_holes_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -19,7 +19,7 @@ public: typedef typename polygon_90_data::iterator_type iterator_type; typedef typename polygon_90_data::compact_iterator_type compact_iterator_type; typedef typename std::list >::const_iterator iterator_holes_type; - typedef polygon_90_data hole_type; + typedef polygon_90_data hole_type; typedef typename coordinate_traits::area_type area_type; typedef point_data point_type; @@ -55,9 +55,9 @@ public: } // copy constructor (since we have dynamic memory) - inline polygon_90_with_holes_data(const polygon_90_with_holes_data& that) : self_(that.self_), + inline polygon_90_with_holes_data(const polygon_90_with_holes_data& that) : self_(that.self_), holes_(that.holes_) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline polygon_90_with_holes_data& operator=(const polygon_90_with_holes_data& that) { self_ = that.self_; @@ -90,7 +90,7 @@ public: inline std::size_t size() const { return self_.size(); - } + } // get begin iterator, returns a pointer to a const polygon inline const iterator_holes_type begin_holes() const { @@ -108,9 +108,8 @@ public: private: polygon_90_data self_; - std::list holes_; + std::list holes_; }; } } #endif - diff --git a/3party/boost/boost/polygon/polygon_data.hpp b/3party/boost/boost/polygon/polygon_data.hpp index cd3b672299..9784466f1d 100644 --- a/3party/boost/boost/polygon/polygon_data.hpp +++ b/3party/boost/boost/polygon/polygon_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -32,7 +32,7 @@ public: // copy constructor (since we have dynamic memory) inline polygon_data(const polygon_data& that) : coords_(that.coords_) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline polygon_data& operator=(const polygon_data& that) { coords_ = that.coords_; @@ -61,10 +61,9 @@ public: inline std::size_t size() const { return coords_.size(); } public: - std::vector > coords_; + std::vector > coords_; }; } } #endif - diff --git a/3party/boost/boost/polygon/polygon_set_concept.hpp b/3party/boost/boost/polygon/polygon_set_concept.hpp index ecd2c70209..e3d37b8216 100644 --- a/3party/boost/boost/polygon/polygon_set_concept.hpp +++ b/3party/boost/boost/polygon/polygon_set_concept.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -27,14 +27,14 @@ namespace boost { namespace polygon{ begin_polygon_set_data(const polygon_set_type& polygon_set) { return polygon_set_traits::begin(polygon_set); } - + template typename enable_if< typename is_any_polygon_set_type::type, typename polygon_set_traits::iterator_type>::type end_polygon_set_data(const polygon_set_type& polygon_set) { return polygon_set_traits::end(polygon_set); } - + template typename enable_if< typename is_polygon_set_type::type, bool>::type @@ -83,11 +83,11 @@ namespace boost { namespace polygon{ //equivalence template - typename enable_if< typename gtl_and_3 < + typename enable_if< typename gtl_and_3 < typename is_any_polygon_set_type::type, typename is_any_polygon_set_type::type, typename is_either_polygon_set_type::type>::type, - bool>::type + bool>::type equivalence(const polygon_set_type_1& lvalue, const polygon_set_type_2& rvalue) { polygon_set_data::coordinate_type> ps1; @@ -117,14 +117,14 @@ namespace boost { namespace polygon{ ps.clean(); return ps.empty(); } - + //extents template - typename enable_if< typename gtl_and< + typename enable_if< typename gtl_and< typename is_mutable_polygon_set_type::type, typename is_mutable_rectangle_concept::type>::type>::type, bool>::type - extents(rectangle_type& extents_rectangle, + extents(rectangle_type& extents_rectangle, const polygon_set_type& polygon_set) { clean(polygon_set); polygon_set_data::coordinate_type> ps; @@ -161,11 +161,11 @@ namespace boost { namespace polygon{ assign(polys, polygon_set); std::size_t retval = 0; for(std::size_t i = 0; i < polys.size(); ++i) { - retval += detail::simplify_detail::simplify(polys[i].self_.coords_, + retval += detail::simplify_detail::simplify(polys[i].self_.coords_, polys[i].self_.coords_, threshold); - for(typename std::list >::iterator itrh = + for(typename std::list >::iterator itrh = polys[i].holes_.begin(); itrh != (polys[i].holes_.end()); ++itrh) { - retval += detail::simplify_detail::simplify((*itrh).coords_, + retval += detail::simplify_detail::simplify((*itrh).coords_, (*itrh).coords_, threshold); } } @@ -204,7 +204,7 @@ namespace boost { namespace polygon{ //interact template - typename enable_if< typename gtl_and_3 < + typename enable_if< typename gtl_and_3 < typename is_any_polygon_set_type::type, typename is_any_polygon_set_type::type, typename is_either_polygon_set_type::type>::type, @@ -222,7 +222,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_set_type::type, polygon_set_type>::type & - scale_up(polygon_set_type& polygon_set, + scale_up(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { typedef typename polygon_set_traits::coordinate_type Unit; clean(polygon_set); @@ -236,7 +236,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_set_type::type, polygon_set_type>::type & - scale_down(polygon_set_type& polygon_set, + scale_down(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { typedef typename polygon_set_traits::coordinate_type Unit; clean(polygon_set); @@ -266,7 +266,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename is_mutable_polygon_set_type::type, polygon_set_type>::type & - keep(polygon_set_type& polygon_set, + keep(polygon_set_type& polygon_set, typename coordinate_traits::coordinate_type>::area_type min_area, typename coordinate_traits::coordinate_type>::area_type max_area, typename coordinate_traits::coordinate_type>::unsigned_area_type min_width, @@ -307,7 +307,7 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and_4 < yes_ps_ob, typename is_any_polygon_set_type::type, typename is_any_polygon_set_type::type, typename is_either_polygon_set_type::type>::type, - polygon_set_view >::type + polygon_set_view >::type operator|(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_set_view (lvalue, rvalue); @@ -317,23 +317,23 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_4 < yes_ps_op, - typename gtl_if::type>::type, - typename gtl_if::type>::type, + typename gtl_if::type>::type, + typename gtl_if::type>::type, typename gtl_if::type>::type> - ::type, polygon_set_view >::type + ::type, polygon_set_view >::type operator+(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_set_view (lvalue, rvalue); } - + struct yes_ps_os : gtl_yes {}; template - typename enable_if< typename gtl_and_4 < yes_ps_os, + typename enable_if< typename gtl_and_4 < yes_ps_os, typename is_any_polygon_set_type::type, typename is_any_polygon_set_type::type, typename is_either_polygon_set_type::type>::type, - polygon_set_view >::type + polygon_set_view >::type operator*(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_set_view (lvalue, rvalue); @@ -346,7 +346,7 @@ namespace boost { namespace polygon{ typename is_any_polygon_set_type::type, typename is_any_polygon_set_type::type, typename is_either_polygon_set_type::type>::type, - polygon_set_view >::type + polygon_set_view >::type operator&(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_set_view (lvalue, rvalue); @@ -359,30 +359,30 @@ namespace boost { namespace polygon{ typename is_any_polygon_set_type::type, typename is_any_polygon_set_type::type, typename is_either_polygon_set_type::type>::type, - polygon_set_view >::type + polygon_set_view >::type operator^(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_set_view (lvalue, rvalue); } - + struct yes_ps_om : gtl_yes {}; template typename enable_if< typename gtl_and_4 < yes_ps_om, - typename gtl_if::type>::type, - typename gtl_if::type>::type, + typename gtl_if::type>::type, + typename gtl_if::type>::type, typename gtl_if::type>::type> - ::type, polygon_set_view >::type + ::type, polygon_set_view >::type operator-(const geometry_type_1& lvalue, const geometry_type_2& rvalue) { return polygon_set_view (lvalue, rvalue); } - + struct yes_ps_ope : gtl_yes {}; template - typename enable_if< typename gtl_and_4< yes_ps_ope, gtl_yes, typename is_mutable_polygon_set_type::type, - typename is_any_polygon_set_type::type>::type, + typename enable_if< typename gtl_and_4< yes_ps_ope, gtl_yes, typename is_mutable_polygon_set_type::type, + typename is_any_polygon_set_type::type>::type, geometry_type_1>::type & operator+=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -391,8 +391,8 @@ namespace boost { namespace polygon{ struct yes_ps_obe : gtl_yes {}; template - typename enable_if< typename gtl_and_3< yes_ps_obe, typename is_mutable_polygon_set_type::type, - typename is_any_polygon_set_type::type>::type, + typename enable_if< typename gtl_and_3< yes_ps_obe, typename is_mutable_polygon_set_type::type, + typename is_any_polygon_set_type::type>::type, geometry_type_1>::type & operator|=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -401,8 +401,8 @@ namespace boost { namespace polygon{ struct yes_ps_ose : gtl_yes {}; template - typename enable_if< typename gtl_and_3< yes_ps_ose, typename is_mutable_polygon_set_type::type, - typename is_any_polygon_set_type::type>::type, + typename enable_if< typename gtl_and_3< yes_ps_ose, typename is_mutable_polygon_set_type::type, + typename is_any_polygon_set_type::type>::type, geometry_type_1>::type & operator*=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -412,8 +412,8 @@ namespace boost { namespace polygon{ template typename enable_if< - typename gtl_and_3< yes_ps_oae, typename is_mutable_polygon_set_type::type, - typename is_any_polygon_set_type::type>::type, + typename gtl_and_3< yes_ps_oae, typename is_mutable_polygon_set_type::type, + typename is_any_polygon_set_type::type>::type, geometry_type_1>::type & operator&=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -422,8 +422,8 @@ namespace boost { namespace polygon{ struct yes_ps_oxe : gtl_yes {}; template - typename enable_if< typename gtl_and_3< yes_ps_oxe, typename is_mutable_polygon_set_type::type, - typename is_any_polygon_set_type::type>::type, + typename enable_if< typename gtl_and_3< yes_ps_oxe, typename is_mutable_polygon_set_type::type, + typename is_any_polygon_set_type::type>::type, geometry_type_1>::type & operator^=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -432,9 +432,9 @@ namespace boost { namespace polygon{ struct yes_ps_ome : gtl_yes {}; template - typename enable_if< - typename gtl_and_3< yes_ps_ome, typename is_mutable_polygon_set_type::type, - typename is_any_polygon_set_type::type>::type, + typename enable_if< + typename gtl_and_3< yes_ps_ome, typename is_mutable_polygon_set_type::type, + typename is_any_polygon_set_type::type>::type, geometry_type_1>::type & operator-=(geometry_type_1& lvalue, const geometry_type_2& rvalue) { return self_assignment_boolean_op(lvalue, rvalue); @@ -550,13 +550,13 @@ namespace boost { namespace polygon{ return polygon_set.end(); } - static inline orientation_2d orient(const view_of& polygon_set) { + static inline orientation_2d orient(const view_of& polygon_set) { return polygon_set.orient(); } - static inline bool clean(const view_of& polygon_set) { + static inline bool clean(const view_of& polygon_set) { return polygon_set.clean(); } - static inline bool sorted(const view_of& polygon_set) { + static inline bool sorted(const view_of& polygon_set) { return polygon_set.sorted(); } }; diff --git a/3party/boost/boost/polygon/polygon_set_data.hpp b/3party/boost/boost/polygon/polygon_set_data.hpp index bbddacf241..41a1b59f21 100644 --- a/3party/boost/boost/polygon/polygon_set_data.hpp +++ b/3party/boost/boost/polygon/polygon_set_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -11,7 +11,6 @@ #include "polygon_45_set_concept.hpp" #include "polygon_traits.hpp" #include "detail/polygon_arbitrary_formation.hpp" -#include namespace boost { namespace polygon { @@ -22,7 +21,7 @@ namespace boost { namespace polygon { template static inline T round_down(double val) { T rounded_val = (T)(val); - if(val < (double)rounded_val) + if(val < (double)rounded_val) --rounded_val; return rounded_val; } @@ -57,11 +56,11 @@ namespace boost { namespace polygon { } // copy constructor - inline polygon_set_data(const polygon_set_data& that) : + inline polygon_set_data(const polygon_set_data& that) : data_(that.data_), dirty_(that.dirty_), unsorted_(that.unsorted_), is_45_(that.is_45_) {} // copy constructor - template + template inline polygon_set_data(const polygon_set_view& that); // destructor @@ -150,10 +149,10 @@ namespace boost { namespace polygon { insert(polygon_object, is_hole, polygon_concept()); } template - inline void insert(const polygon_with_holes_type& polygon_with_holes_object, bool is_hole, + inline void insert(const polygon_with_holes_type& polygon_with_holes_object, bool is_hole, polygon_with_holes_concept ) { insert(polygon_with_holes_object, is_hole, polygon_concept()); - for(typename polygon_with_holes_traits::iterator_holes_type itr = + for(typename polygon_with_holes_traits::iterator_holes_type itr = begin_holes(polygon_with_holes_object); itr != end_holes(polygon_with_holes_object); ++itr) { insert(*itr, !is_hole, polygon_concept()); @@ -161,12 +160,12 @@ namespace boost { namespace polygon { } template - inline void insert(const polygon_with_holes_type& polygon_with_holes_object, bool is_hole, + inline void insert(const polygon_with_holes_type& polygon_with_holes_object, bool is_hole, polygon_45_with_holes_concept ) { insert(polygon_with_holes_object, is_hole, polygon_with_holes_concept()); } template - inline void insert(const polygon_with_holes_type& polygon_with_holes_object, bool is_hole, + inline void insert(const polygon_with_holes_type& polygon_with_holes_object, bool is_hole, polygon_90_with_holes_concept ) { insert(polygon_with_holes_object, is_hole, polygon_with_holes_concept()); } @@ -212,7 +211,7 @@ namespace boost { namespace polygon { first_point = previous_point = current_point; } else { if(previous_point != current_point) { - element_type elem(edge_type(previous_point, current_point), + element_type elem(edge_type(previous_point, current_point), ( previous_point.get(HORIZONTAL) == current_point.get(HORIZONTAL) ? -1 : 1) * multiplier); insert_clean(elem); } @@ -222,7 +221,7 @@ namespace boost { namespace polygon { current_point = first_point; if(!first_iteration) { if(previous_point != current_point) { - element_type elem(edge_type(previous_point, current_point), + element_type elem(edge_type(previous_point, current_point), ( previous_point.get(HORIZONTAL) == current_point.get(HORIZONTAL) ? -1 : 1) * multiplier); insert_clean(elem); } @@ -248,7 +247,7 @@ namespace boost { namespace polygon { data.push_back(vertex_half_edge((*itr).first.first, (*itr).first.second, (*itr).second)); data.push_back(vertex_half_edge((*itr).first.second, (*itr).first.first, -1 * (*itr).second)); } - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(container, data.begin(), data.end()); //std::cout << "DONE FORMING POLYGONS\n"; } @@ -270,14 +269,10 @@ namespace boost { namespace polygon { } } - // equivalence operator - inline bool operator==(const polygon_set_data& p) const { - clean(); - p.clean(); - return data_ == p.data_; - } - - // inequivalence operator + // equivalence operator + inline bool operator==(const polygon_set_data& p) const; + + // inequivalence operator inline bool operator!=(const polygon_set_data& p) const { return !((*this) == p); } @@ -321,7 +316,7 @@ namespace boost { namespace polygon { void sort() const{ if(unsorted_) { - gtlsort(data_.begin(), data_.end()); + polygon_sort(data_.begin(), data_.end()); unsorted_ = false; } } @@ -329,13 +324,14 @@ namespace boost { namespace polygon { template void set(input_iterator_type input_begin, input_iterator_type input_end) { clear(); + reserve(std::distance(input_begin,input_end)); insert(input_begin, input_end); dirty_ = true; unsorted_ = true; } void set(const value_type& value) { - data_ = value; + data_ = value; dirty_ = true; unsorted_ = true; } @@ -362,7 +358,7 @@ namespace boost { namespace polygon { resize(coordinate_type resizing, bool corner_fill_arc = false, unsigned int num_circle_segments=0); template - inline polygon_set_data& + inline polygon_set_data& transform(const transform_type& tr) { std::vector > polys; get(polys); @@ -376,7 +372,7 @@ namespace boost { namespace polygon { return *this; } - inline polygon_set_data& + inline polygon_set_data& scale_up(typename coordinate_traits::unsigned_area_type factor) { for(typename value_type::iterator itr = data_.begin(); itr != data_.end(); ++itr) { ::boost::polygon::scale_up((*itr).first.first, factor); @@ -384,31 +380,41 @@ namespace boost { namespace polygon { } return *this; } - - inline polygon_set_data& + + inline polygon_set_data& scale_down(typename coordinate_traits::unsigned_area_type factor) { for(typename value_type::iterator itr = data_.begin(); itr != data_.end(); ++itr) { + bool vb = (*itr).first.first.x() == (*itr).first.second.x(); ::boost::polygon::scale_down((*itr).first.first, factor); ::boost::polygon::scale_down((*itr).first.second, factor); - } - unsorted_ = true; - dirty_ = true; - return *this; - } - - template - inline polygon_set_data& scale(polygon_set_data& polygon_set, - const scaling_type& scaling) { - for(typename value_type::iterator itr = begin(); itr != end(); ++itr) { - ::boost::polygon::scale((*itr).first.first, scaling); - ::boost::polygon::scale((*itr).first.second, scaling); + bool va = (*itr).first.first.x() == (*itr).first.second.x(); + if(!vb && va) { + (*itr).second *= -1; + } } unsorted_ = true; dirty_ = true; return *this; } - static inline void compute_offset_edge(point_data& pt1, point_data& pt2, + template + inline polygon_set_data& scale(polygon_set_data& polygon_set, + const scaling_type& scaling) { + for(typename value_type::iterator itr = begin(); itr != end(); ++itr) { + bool vb = (*itr).first.first.x() == (*itr).first.second.x(); + ::boost::polygon::scale((*itr).first.first, scaling); + ::boost::polygon::scale((*itr).first.second, scaling); + bool va = (*itr).first.first.x() == (*itr).first.second.x(); + if(!vb && va) { + (*itr).second *= -1; + } + } + unsorted_ = true; + dirty_ = true; + return *this; + } + + static inline void compute_offset_edge(point_data& pt1, point_data& pt2, const point_data& prev_pt, const point_data& current_pt, long double distance, int multiplier) { @@ -439,17 +445,17 @@ namespace boost { namespace polygon { he2.second.y((long double)(next_pt.y())); compute_offset_edge(he1.first, he1.second, prev_pt, current_pt, distance, multiplier); compute_offset_edge(he2.first, he2.second, current_pt, next_pt, distance, multiplier); - typename scanline_base::compute_intersection_pack pack; + typedef scanline_base::compute_intersection_pack pack; point_data rpt; point_data bisectorpt((he1.second.x()+he2.first.x())/2, (he1.second.y()+he2.first.y())/2); point_data orig_pt((long double)pt.x(), (long double)pt.y()); if(euclidean_distance(bisectorpt, orig_pt) < distance/2) { - if(!pack.compute_lazy_intersection(rpt, he1, he2, true, false)) { + if(!pack::compute_lazy_intersection(rpt, he1, he2, true, false)) { rpt = he1.second; //colinear offset edges use shared point } } else { - if(!pack.compute_lazy_intersection(rpt, he1, std::pair, point_data >(orig_pt, bisectorpt), true, false)) { + if(!pack::compute_lazy_intersection(rpt, he1, std::pair, point_data >(orig_pt, bisectorpt), true, false)) { rpt = he1.second; //colinear offset edges use shared point } } @@ -565,8 +571,8 @@ namespace boost { namespace polygon { } template - inline polygon_set_data& - insert_with_resize_dispatch(const geometry_type& poly, coordinate_type resizing, bool corner_fill_arc, unsigned int num_circle_segments, bool hole, + inline polygon_set_data& + insert_with_resize_dispatch(const geometry_type& poly, coordinate_type resizing, bool corner_fill_arc, unsigned int num_circle_segments, bool hole, polygon_with_holes_concept tag) { insert_with_resize_dispatch(poly, resizing, corner_fill_arc, num_circle_segments, hole, polygon_concept()); for(typename polygon_with_holes_traits::iterator_holes_type itr = @@ -578,14 +584,14 @@ namespace boost { namespace polygon { } template - inline polygon_set_data& - insert_with_resize_dispatch(const geometry_type& poly, coordinate_type resizing, bool corner_fill_arc, unsigned int num_circle_segments, bool hole, + inline polygon_set_data& + insert_with_resize_dispatch(const geometry_type& poly, coordinate_type resizing, bool corner_fill_arc, unsigned int num_circle_segments, bool hole, polygon_concept tag) { if (resizing==0) return *this; - + // one dimensional used to store CCW/CW flag //direction_1d wdir = winding(poly); // LOW==CLOCKWISE just faster to type @@ -630,25 +636,25 @@ namespace boost { namespace polygon { point_data normal2( third->y()-second->y(), second->x()-third->x()); double direction = normal1.x()*normal2.y()- normal2.x()*normal1.y(); bool convex = direction>0; - + bool treat_as_concave = !convex; if(sizing_sign) treat_as_concave = convex; point_data v; assign(v, normal1); double s2 = (v.x()*v.x()+v.y()*v.y()); - double s = sqrt(s2)/resizing; + double s = std::sqrt(s2)/resizing; v = point_data(v.x()/s,v.y()/s); point_data curr_prev; if (prev_concave) //TODO missing round_down() curr_prev = point_data(first->x()+v.x(),first->y()+v.y()); - else + else curr_prev = prev_point; // around concave corners - insert rectangle // if previous corner is concave it's point info may be ignored - if ( treat_as_concave) { + if ( treat_as_concave) { std::vector > pts; pts.push_back(point_data(second->x()+v.x(),second->y()+v.y())); @@ -669,13 +675,13 @@ namespace boost { namespace polygon { direction_1d winding; winding = convex?COUNTERCLOCKWISE:CLOCKWISE; if (make_resizing_vertex_list(pts, curr_prev, prev_concave, *first, *second, *third, resizing - , num_circle_segments, corner_fill_arc)) + , num_circle_segments, corner_fill_arc)) { if (first_pts.size()) { for (int i=0; i tmp; //insert original shape @@ -721,7 +727,7 @@ namespace boost { namespace polygon { inline polygon_set_data& - interact(const polygon_set_data& that); + interact(const polygon_set_data& that); inline bool downcast(polygon_45_set_data& result) const { if(!is_45_) return false; @@ -790,7 +796,7 @@ namespace boost { namespace polygon { data.push_back(vertex_half_edge((*itr).first.first, (*itr).first.second, (*itr).second)); data.push_back(vertex_half_edge((*itr).first.second, (*itr).first.first, -1 * (*itr).second)); } - gtlsort(data.begin(), data.end()); + polygon_sort(data.begin(), data.end()); pf.scan(container, data.begin(), data.end()); } }; @@ -810,17 +816,17 @@ namespace boost { namespace polygon { // } template - inline int make_resizing_vertex_list(std::vector > >& return_points, + inline int make_resizing_vertex_list(std::vector > >& return_points, point_data& curr_prev, bool ignore_prev_point, point_data< T> start, point_data middle, point_data< T> end, double sizing_distance, unsigned int num_circle_segments, bool corner_fill_arc) { // handle the case of adding an intersection point point_data dn1( middle.y()-start.y(), start.x()-middle.x()); - double size = sizing_distance/sqrt( dn1.x()*dn1.x()+dn1.y()*dn1.y()); + double size = sizing_distance/std::sqrt( dn1.x()*dn1.x()+dn1.y()*dn1.y()); dn1 = point_data( dn1.x()*size, dn1.y()* size); point_data dn2( end.y()-middle.y(), middle.x()-end.x()); - size = sizing_distance/sqrt( dn2.x()*dn2.x()+dn2.y()*dn2.y()); + size = sizing_distance/std::sqrt( dn2.x()*dn2.x()+dn2.y()*dn2.y()); dn2 = point_data( dn2.x()*size, dn2.y()* size); point_data start_offset((start.x()+dn1.x()),(start.y()+dn1.y())); point_data mid1_offset((middle.x()+dn1.x()),(middle.y()+dn1.y())); @@ -843,7 +849,7 @@ namespace boost { namespace polygon { int num = make_arc(return_points[return_points.size()-1],mid1_offset,mid2_offset,dmid,sizing_distance,num_circle_segments); curr_prev = round_down(mid2_offset); return num; - + } std::pair,point_data > he1(start_offset,mid1_offset); @@ -881,21 +887,21 @@ namespace boost { namespace polygon { // returnPoints will start with the first point after start // returnPoints vector may be empty template - inline int make_arc(std::vector >& return_points, + inline int make_arc(std::vector >& return_points, point_data< double> start, point_data< double> end, point_data< double> center, double r, unsigned int num_circle_segments) { const double our_pi=3.1415926535897932384626433832795028841971; - // derive start and end angles + // derive start and end angles double ps = atan2(start.y()-center.y(), start.x()-center.x()); double pe = atan2(end.y()-center.y(), end.x()-center.x()); - if (ps < 0.0) + if (ps < 0.0) ps += 2.0 * our_pi; - if (pe <= 0.0) + if (pe <= 0.0) pe += 2.0 * our_pi; - if (ps >= 2.0 * our_pi) + if (ps >= 2.0 * our_pi) ps -= 2.0 * our_pi; - while (pe <= ps) + while (pe <= ps) pe += 2.0 * our_pi; double delta_angle = (2.0 * our_pi) / (double)num_circle_segments; if ( start==end) // full circle? @@ -941,12 +947,12 @@ namespace boost { namespace polygon { inline connectivity_extraction() : ce_(), nodeCount_(0) {} inline connectivity_extraction(const connectivity_extraction& that) : ce_(that.ce_), nodeCount_(that.nodeCount_) {} - inline connectivity_extraction& operator=(const connectivity_extraction& that) { - ce_ = that.ce_; + inline connectivity_extraction& operator=(const connectivity_extraction& that) { + ce_ = that.ce_; nodeCount_ = that.nodeCount_; {} return *this; } - + //insert a polygon set graph node, the value returned is the id of the graph node inline unsigned int insert(const polygon_set_data& ps) { ps.clean(); @@ -959,7 +965,7 @@ namespace boost { namespace polygon { ps.insert(geoObj); return insert(ps); } - + //extract connectivity and store the edges in the graph //graph must be indexable by graph node id and the indexed value must be a std::set of //graph node id @@ -997,4 +1003,3 @@ namespace boost { namespace polygon { #include "polygon_set_concept.hpp" #include "detail/minkowski.hpp" #endif - diff --git a/3party/boost/boost/polygon/polygon_set_traits.hpp b/3party/boost/boost/polygon/polygon_set_traits.hpp index 93604c4931..b68bbc1390 100644 --- a/3party/boost/boost/polygon/polygon_set_traits.hpp +++ b/3party/boost/boost/polygon/polygon_set_traits.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -45,13 +45,13 @@ namespace boost { namespace polygon{ typedef typename is_polygonal_concept::type>::type type; }; template - struct is_polygon_set_type > { + struct is_polygon_set_type > { typedef typename gtl_or< typename is_polygonal_concept >::type>::type, typename is_polygonal_concept::value_type>::type>::type>::type type; }; template - struct is_polygon_set_type > { + struct is_polygon_set_type > { typedef typename gtl_or< typename is_polygonal_concept >::type>::type, typename is_polygonal_concept::value_type>::type>::type>::type type; @@ -62,13 +62,13 @@ namespace boost { namespace polygon{ typedef typename gtl_same_type::type>::type type; }; template - struct is_mutable_polygon_set_type > { + struct is_mutable_polygon_set_type > { typedef typename gtl_or< - typename gtl_same_type >::type>::type, + typename gtl_same_type >::type>::type, typename is_polygonal_concept::value_type>::type>::type>::type type; }; template - struct is_mutable_polygon_set_type > { + struct is_mutable_polygon_set_type > { typedef typename gtl_or< typename gtl_same_type >::type>::type, typename is_polygonal_concept::value_type>::type>::type>::type type; @@ -82,6 +82,7 @@ namespace boost { namespace polygon{ static inline void set(std::list& polygon_set, input_iterator_type input_begin, input_iterator_type input_end) { polygon_set.clear(); polygon_set_data >::coordinate_type> ps; + ps.reserve(std::distance(input_begin, input_end)); ps.insert(input_begin, input_end); ps.get(polygon_set); } @@ -91,7 +92,10 @@ namespace boost { namespace polygon{ template static inline void set(std::vector& polygon_set, input_iterator_type input_begin, input_iterator_type input_end) { polygon_set.clear(); + size_t num_ele = std::distance(input_begin, input_end); + polygon_set.reserve(num_ele); polygon_set_data >::coordinate_type> ps; + ps.reserve(num_ele); ps.insert(input_begin, input_end); ps.get(polygon_set); } @@ -100,7 +104,7 @@ namespace boost { namespace polygon{ template struct polygon_set_mutable_traits > { template - static inline void set(polygon_set_data& polygon_set, + static inline void set(polygon_set_data& polygon_set, input_iterator_type input_begin, input_iterator_type input_end) { polygon_set.set(input_begin, input_end); } @@ -124,7 +128,6 @@ namespace boost { namespace polygon{ static inline bool sorted(const polygon_set_data& polygon_set) { polygon_set.sort(); return true; } }; -} +} } #endif - diff --git a/3party/boost/boost/polygon/polygon_traits.hpp b/3party/boost/boost/polygon/polygon_traits.hpp index 041321d22b..5595adf9ed 100644 --- a/3party/boost/boost/polygon/polygon_traits.hpp +++ b/3party/boost/boost/polygon/polygon_traits.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -18,17 +18,17 @@ namespace boost { namespace polygon{ static inline compact_iterator_type begin_compact(const T& t) { return t.begin_compact(); } - + // Get the end iterator static inline compact_iterator_type end_compact(const T& t) { return t.end_compact(); } - + // Get the number of sides of the polygon static inline std::size_t size(const T& t) { return t.size(); } - + // Get the winding direction of the polygon static inline winding_direction winding(const T&) { return unknown_winding; @@ -45,17 +45,17 @@ namespace boost { namespace polygon{ static inline iterator_type begin_points(const T& t) { return t.begin(); } - + // Get the end iterator static inline iterator_type end_points(const T& t) { return t.end(); } - + // Get the number of sides of the polygon static inline std::size_t size(const T& t) { return t.size(); } - + // Get the winding direction of the polygon static inline winding_direction winding(const T&) { return unknown_winding; @@ -73,18 +73,18 @@ namespace boost { namespace polygon{ return iterator_type(polygon_90_traits::begin_compact(t), polygon_90_traits::end_compact(t)); } - + // Get the end iterator static inline iterator_type end_points(const T& t) { return iterator_type(polygon_90_traits::end_compact(t), polygon_90_traits::end_compact(t)); } - + // Get the number of sides of the polygon static inline std::size_t size(const T& t) { return polygon_90_traits::size(t); } - + // Get the winding direction of the polygon static inline winding_direction winding(const T& t) { return polygon_90_traits::winding(t); @@ -97,7 +97,7 @@ namespace boost { namespace polygon{ struct polygon_traits {}; template - struct polygon_traits::type, polygon_concept>::type, typename gtl_same_type::type, polygon_45_concept>::type, @@ -106,7 +106,7 @@ namespace boost { namespace polygon{ >::type> : public polygon_traits_general {}; template - struct polygon_traits< T, + struct polygon_traits< T, typename gtl_or< typename gtl_same_type::type, polygon_90_concept>::type, typename gtl_same_type::type, polygon_90_with_holes_concept>::type @@ -161,7 +161,7 @@ namespace boost { namespace polygon{ return t.end_holes(); } - // Get the number of holes + // Get the number of holes static inline std::size_t size_holes(const T& t) { return t.size_holes(); } @@ -169,14 +169,14 @@ namespace boost { namespace polygon{ template struct polygon_90_mutable_traits { - + // Set the data of a polygon with the unique coordinates in an iterator, starting with an x template static inline T& set_compact(T& t, iT input_begin, iT input_end) { t.set_compact(input_begin, input_end); return t; } - + }; template @@ -199,7 +199,7 @@ namespace boost { namespace polygon{ t.set(input_begin, input_end); return t; } - + }; template @@ -251,7 +251,7 @@ namespace boost { namespace polygon{ struct polygon_45_with_holes_concept {}; struct polygon_90_concept {}; struct polygon_90_with_holes_concept {}; - + template struct is_polygon_90_type { @@ -272,7 +272,7 @@ namespace boost { namespace polygon{ typedef typename gtl_or::type, typename gtl_same_type::type>::type type; }; - + template struct is_polygon_90_with_holes_type { typedef typename geometry_concept::type GC; @@ -284,7 +284,7 @@ namespace boost { namespace polygon{ struct is_polygon_45_with_holes_type { typedef typename geometry_concept::type GC; typedef typename gtl_or_3::type, - typename is_polygon_45_type::type, + typename is_polygon_45_type::type, typename gtl_same_type::type>::type type; }; @@ -292,7 +292,7 @@ namespace boost { namespace polygon{ struct is_polygon_with_holes_type { typedef typename geometry_concept::type GC; typedef typename gtl_or_3::type, - typename is_polygon_type::type, + typename is_polygon_type::type, typename gtl_same_type::type>::type type; }; @@ -301,7 +301,7 @@ namespace boost { namespace polygon{ typedef typename geometry_concept::type GC; typedef typename gtl_same_type::type type; }; - + template struct is_mutable_polygon_45_type { typedef typename geometry_concept::type GC; @@ -313,7 +313,7 @@ namespace boost { namespace polygon{ typedef typename geometry_concept::type GC; typedef typename gtl_same_type::type type; }; - + template struct is_mutable_polygon_90_with_holes_type { typedef typename geometry_concept::type GC; @@ -341,10 +341,10 @@ namespace boost { namespace polygon{ template struct is_any_mutable_polygon_without_holes_type { typedef typename gtl_or_3< - typename is_mutable_polygon_90_type::type, - typename is_mutable_polygon_45_type::type, + typename is_mutable_polygon_90_type::type, + typename is_mutable_polygon_45_type::type, typename is_mutable_polygon_type::type>::type type; }; - + template struct is_any_mutable_polygon_type { typedef typename gtl_or::type, @@ -372,7 +372,7 @@ namespace boost { namespace polygon{ template struct distance_type_by_domain { typedef typename coordinate_traits::coordinate_distance type; }; template - struct distance_type_by_domain { + struct distance_type_by_domain { typedef typename coordinate_traits::coordinate_difference type; }; // \brief Sets the boundary of the polygon to the points in the iterator range @@ -399,9 +399,9 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_90_concept template - typename enable_if ::type, - typename is_mutable_polygon_90_with_holes_type::type>::type, T>::type & + typename enable_if ::type, + typename is_mutable_polygon_90_with_holes_type::type>::type, T>::type & set_compact(T& t, iT begin_compact_coordinates, iT end_compact_coordinates) { polygon_90_mutable_traits::set_compact(t, begin_compact_coordinates, end_compact_coordinates); return t; @@ -411,7 +411,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and < typename is_any_mutable_polygon_with_holes_type::type, - typename gtl_different_type::type>::type, + typename gtl_different_type::type>::type, manhattan_domain>::type>::type, T>::type & set_compact(T& t, iT begin_compact_coordinates, iT end_compact_coordinates) { @@ -434,29 +434,29 @@ namespace boost { namespace polygon{ typename polygon_90_traits::compact_iterator_type begin_compact(const T& polygon, typename enable_if< - typename gtl_and ::type, + typename gtl_and ::type, typename gtl_same_type::type>::type, manhattan_domain>::type>::type>::type * = 0 ) { return polygon_90_traits::begin_compact(polygon); } - + /// \relatesalso polygon_90_concept template typename polygon_90_traits::compact_iterator_type end_compact(const T& polygon, - typename enable_if< - typename gtl_and ::type, + typename enable_if< + typename gtl_and ::type, typename gtl_same_type::type>::type, manhattan_domain>::type>::type>::type * = 0 ) { return polygon_90_traits::end_compact(polygon); } - + /// \relatesalso polygon_concept template typename enable_if < typename gtl_if< - typename is_polygon_with_holes_type::type>::type, + typename is_polygon_with_holes_type::type>::type, typename polygon_traits::iterator_type>::type begin_points(const T& polygon) { return polygon_traits::begin_points(polygon); @@ -465,7 +465,7 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_concept template typename enable_if < typename gtl_if< - typename is_polygon_with_holes_type::type>::type, + typename is_polygon_with_holes_type::type>::type, typename polygon_traits::iterator_type>::type end_points(const T& polygon) { return polygon_traits::end_points(polygon); @@ -473,7 +473,7 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_concept template - typename enable_if ::type, + typename enable_if ::type, std::size_t>::type size(const T& polygon) { return polygon_traits::size(polygon); @@ -482,7 +482,7 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_with_holes_concept template typename enable_if < typename gtl_if< - typename is_polygon_with_holes_type::type>::type, + typename is_polygon_with_holes_type::type>::type, typename polygon_with_holes_traits::iterator_holes_type>::type begin_holes(const T& polygon) { return polygon_with_holes_traits::begin_holes(polygon); @@ -491,7 +491,7 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_with_holes_concept template typename enable_if < typename gtl_if< - typename is_polygon_with_holes_type::type>::type, + typename is_polygon_with_holes_type::type>::type, typename polygon_with_holes_traits::iterator_holes_type>::type end_holes(const T& polygon) { return polygon_with_holes_traits::end_holes(polygon); @@ -499,7 +499,7 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_with_holes_concept template - typename enable_if ::type, + typename enable_if ::type, std::size_t>::type size_holes(const T& polygon) { return polygon_with_holes_traits::size_holes(polygon); @@ -550,7 +550,7 @@ namespace boost { namespace polygon{ polygon_with_holes_traits::end_holes(rvalue)); return lvalue; } - + // \relatesalso polygon_90_concept template typename enable_if< @@ -561,7 +561,7 @@ namespace boost { namespace polygon{ polygon_90_traits::end_compact(rvalue)); return lvalue; } - + // \relatesalso polygon_90_with_holes_concept template typename enable_if< @@ -589,14 +589,14 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_90_concept template - typename enable_if< typename gtl_and< typename is_mutable_polygon_90_type::type, + typename enable_if< typename gtl_and< typename is_mutable_polygon_90_type::type, typename is_point_concept::type>::type>::type, polygon_type>::type & convolve(polygon_type& polygon, const point_type& point) { std::vector::coordinate_type> coords; coords.reserve(size(polygon)); bool pingpong = true; - for(typename polygon_90_traits::compact_iterator_type iter = begin_compact(polygon); + for(typename polygon_90_traits::compact_iterator_type iter = begin_compact(polygon); iter != end_compact(polygon); ++iter) { coords.push_back((*iter) + (pingpong ? x(point) : y(point))); pingpong = !pingpong; @@ -607,15 +607,15 @@ namespace boost { namespace polygon{ /// \relatesalso polygon_concept template - typename enable_if< typename gtl_and< typename gtl_or< - typename is_mutable_polygon_45_type::type, - typename is_mutable_polygon_type::type>::type, + typename enable_if< typename gtl_and< typename gtl_or< + typename is_mutable_polygon_45_type::type, + typename is_mutable_polygon_type::type>::type, typename is_point_concept::type>::type>::type, polygon_type>::type & convolve(polygon_type& polygon, const point_type& point) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); convolve(points.back(), point); @@ -623,11 +623,11 @@ namespace boost { namespace polygon{ polygon_mutable_traits::set_points(polygon, points.begin(), points.end()); return polygon; } - + /// \relatesalso polygon_with_holes_concept template typename enable_if< - typename gtl_and< typename is_any_mutable_polygon_with_holes_type::type, + typename gtl_and< typename is_any_mutable_polygon_with_holes_type::type, typename is_point_concept::type>::type>::type, polygon_type>::type & convolve(polygon_type& polygon, const point_type& point) { @@ -654,7 +654,7 @@ namespace boost { namespace polygon{ typedef typename polygon_traits::coordinate_type Unit; if(orient == HORIZONTAL) return convolve(polygon, point_data(displacement, Unit(0))); return convolve(polygon, point_data(Unit(0), displacement)); - } + } /// \relatesalso polygon_concept /// \brief Applies a transformation to the polygon. @@ -667,7 +667,7 @@ namespace boost { namespace polygon{ transform(polygon_type& polygon, const transform_type& tr) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); transform(points.back(), tr); @@ -701,7 +701,7 @@ namespace boost { namespace polygon{ scale_up(polygon_type& polygon, typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); scale_up(points.back(), factor); @@ -732,15 +732,15 @@ namespace boost { namespace polygon{ //scale non-45 down template typename enable_if< - typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, + typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, typename gtl_not::type>::type>::type>::type>::type, polygon_type>::type & scale_down(polygon_type& polygon, typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); scale_down(points.back(), factor); @@ -756,8 +756,6 @@ namespace boost { namespace polygon{ void snap_point_vector_to_45(std::vector >& pts) { typedef point_data Point; if(pts.size() < 3) { pts.clear(); return; } - Point firstPt = pts.front(); - Point prevPt = firstPt; typename std::vector >::iterator endLocation = std::unique(pts.begin(), pts.end()); if(endLocation != pts.end()){ pts.resize(endLocation - pts.begin()); @@ -838,7 +836,7 @@ namespace boost { namespace polygon{ snap_to_45(polygon_type& polygon) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); } @@ -869,15 +867,15 @@ namespace boost { namespace polygon{ //scale specifically 45 down template typename enable_if< - typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, + typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, typename gtl_same_type - < forty_five_domain, + < forty_five_domain, typename geometry_domain::type>::type>::type>::type, polygon_type>::type & scale_down(polygon_type& polygon, typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); scale_down(points.back(), factor); @@ -906,18 +904,18 @@ namespace boost { namespace polygon{ return polygon; } - //scale non-45 + //scale non-45 template typename enable_if< - typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, + typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, typename gtl_not::type>::type>::type>::type>::type, polygon_type>::type & scale(polygon_type& polygon, double factor) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); scale(points.back(), anisotropic_scale_factor(factor, factor)); @@ -926,19 +924,19 @@ namespace boost { namespace polygon{ return polygon; } - //scale specifically 45 + //scale specifically 45 template polygon_type& scale(polygon_type& polygon, double factor, typename enable_if< - typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, + typename gtl_and< typename is_any_mutable_polygon_without_holes_type::type, typename gtl_same_type - < forty_five_domain, + < forty_five_domain, typename geometry_domain::type>::type>::type>::type>::type * = 0 ) { std::vector::iterator_type>::value_type> points; points.reserve(size(polygon)); - for(typename polygon_traits::iterator_type iter = begin_points(polygon); + for(typename polygon_traits::iterator_type iter = begin_points(polygon); iter != end_points(polygon); ++iter) { points.push_back(*iter); scale(points.back(), anisotropic_scale_factor(factor, factor)); @@ -1012,7 +1010,7 @@ namespace boost { namespace polygon{ } template - typename enable_if< + typename enable_if< typename is_polygon_with_holes_type::type, typename area_type_by_domain< typename geometry_domain::type>::type, typename polygon_traits::coordinate_type>::type>::type @@ -1036,7 +1034,7 @@ namespace boost { namespace polygon{ template bool point_sequence_is_45(iT itr, iT itr_end) { - typedef typename iT::value_type Point; + typedef typename std::iterator_traits::value_type Point; typedef typename point_traits::coordinate_type Unit; if(itr == itr_end) return true; Point firstPt = *itr; @@ -1097,7 +1095,7 @@ namespace boost { namespace polygon{ typename distance_type_by_domain ::type>::type, typename polygon_traits::coordinate_type>::type perimeter(const T& polygon, - typename enable_if< + typename enable_if< typename is_polygon_with_holes_type::type>::type * = 0 ) { typedef typename distance_type_by_domain @@ -1115,7 +1113,7 @@ namespace boost { namespace polygon{ } template - typename enable_if ::type, + typename enable_if ::type, direction_1d>::type winding(const T& polygon) { winding_direction wd = polygon_traits::winding(polygon); @@ -1129,9 +1127,9 @@ namespace boost { namespace polygon{ } template - typename enable_if< - typename gtl_and< typename is_polygon_90_type::type, - typename gtl_same_type::type, point_concept>::type>::type, + typename enable_if< + typename gtl_and< typename is_polygon_90_type::type, + typename gtl_same_type::type, point_concept>::type>::type, bool>::type contains(const T& polygon, const input_point_type& point, bool consider_touch = true) { typedef T polygon_type; @@ -1148,23 +1146,23 @@ namespace boost { namespace polygon{ if(i == num-1) iter = begin_points(polygon); else ++iter; point_type current_pt = *iter; - if(x(current_pt) == + if(x(current_pt) == x(prev_pt)) { - unsigned int index = x(current_pt) > + unsigned int index = x(current_pt) > x(point); std::size_t increment = 0; - interval_data ivl(y(current_pt), + interval_data ivl(y(current_pt), y(prev_pt)); if(contains(ivl, y(point), true)) { - if(x(current_pt) == + if(x(current_pt) == x(point)) return consider_touch; ++increment; - if(y(current_pt) != + if(y(current_pt) != y(point) && - y(prev_pt) != + y(prev_pt) != y(point)) { ++increment; - } + } counts[index] += increment; } } @@ -1173,7 +1171,7 @@ namespace boost { namespace polygon{ //odd count implies boundary condition if(counts[0] % 2 || counts[1] % 2) return consider_touch; //an odd number of edges to the left implies interior pt - return counts[winding(polygon) == COUNTERCLOCKWISE ? 0 : 1] % 4 != 0; + return counts[winding(polygon) == COUNTERCLOCKWISE ? 0 : 1] % 4 != 0; } //TODO: refactor to expose as user APIs @@ -1200,7 +1198,7 @@ namespace boost { namespace polygon{ return lp(pt, pt2) && lp(pt1, pt); return lp(pt, pt1) && lp(pt2, pt); } - + template static inline bool equal_slope(area_type dx1, area_type dy1, area_type dx2, area_type dy2) { typedef typename coordinate_traits::unsigned_area_type unsigned_product_type; @@ -1240,7 +1238,7 @@ namespace boost { namespace polygon{ dy2 *= -1; dx2 *= -1; } else if(dx2 == 0) { - //if the second slope is vertical the first is always less unless it is also vertical, in which case they are equal + //if the second slope is vertical the first is always less unless it is also vertical, in which case they are equal return dx1 != 0; } typedef typename coordinate_traits::unsigned_area_type unsigned_product_type; @@ -1285,8 +1283,8 @@ namespace boost { namespace polygon{ }; template - typename enable_if< - typename gtl_and< typename is_any_mutable_polygon_with_holes_type::type, + typename enable_if< + typename gtl_and< typename is_any_mutable_polygon_with_holes_type::type, typename gtl_same_type::type, point_concept>::type>::type, bool>::type contains(const T& polygon, const input_point_type& point, bool consider_touch = true) { @@ -1306,10 +1304,10 @@ namespace boost { namespace polygon{ } template - typename enable_if< - typename gtl_and_3< - typename is_polygon_type::type, - typename gtl_different_type::type>::type, manhattan_domain>::type, + typename enable_if< + typename gtl_and_3< + typename is_polygon_type::type, + typename gtl_different_type::type>::type, manhattan_domain>::type, typename gtl_same_type::type, point_concept>::type>::type, bool>::type contains(const T& polygon, const input_point_type& point, bool consider_touch = true) { @@ -1367,16 +1365,16 @@ namespace boost { namespace polygon{ } } he.first = he.second; - } + } return above % 2 != 0; //if the point is above an odd number of edges is must be inside polygon } /* template - typename enable_if< - typename gtl_and_3< - typename is_polygon_with_holes_type::type, - typename gtl_different_type::type>::type, manhattan_domain>::type, + typename enable_if< + typename gtl_and_3< + typename is_polygon_with_holes_type::type, + typename gtl_different_type::type>::type, manhattan_domain>::type, typename gtl_same_type::type, point_concept>::type>::type, bool>::type contains(const T& polygon, const input_point_type& point, bool consider_touch = true) { @@ -1420,7 +1418,7 @@ namespace boost { namespace polygon{ } } he.first = he.second; - } + } return above % 2 != 0; //if the point is above an odd number of edges is must be inside polygon } */ @@ -1429,19 +1427,19 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and< typename is_mutable_point_concept::type>::type, typename is_polygon_with_holes_type::type>::type, - bool>::type + bool>::type center(T1& center_point, const T2& polygon) { typedef typename polygon_traits::coordinate_type coordinate_type; rectangle_data bbox; extents(bbox, polygon); return center(center_point, bbox); } - + template typename enable_if< typename gtl_and< typename is_mutable_rectangle_concept::type>::type, typename is_polygon_with_holes_type::type>::type, - bool>::type + bool>::type extents(T1& bounding_box, const T2& polygon) { typedef typename polygon_traits::iterator_type iterator; bool first_iteration = true; @@ -1548,7 +1546,7 @@ namespace boost { namespace polygon{ // }; template struct get_void {}; template <> struct get_void { typedef void type; }; - + template struct polygon_with_holes_traits< T, typename get_void::type>::type > { typedef T hole_type; @@ -1565,7 +1563,7 @@ namespace boost { namespace polygon{ rectangle_data rect; view_of(const T& obj) : rect() { point_data pts[2]; - typename polygon_traits::iterator_type itr = + typename polygon_traits::iterator_type itr = begin_points(obj), itre = end_points(obj); if(itr == itre) return; assign(pts[0], *itr); @@ -1584,7 +1582,7 @@ namespace boost { namespace polygon{ struct geometry_concept > { typedef rectangle_concept type; }; - + template struct view_of { const T* t; @@ -1597,17 +1595,17 @@ namespace boost { namespace polygon{ inline iterator_type begin() const { return polygon_traits::begin_points(*t); } - + /// Get the end iterator inline iterator_type end() const { return polygon_traits::end_points(*t); } - + /// Get the number of sides of the polygon inline std::size_t size() const { return polygon_traits::size(*t); } - + /// Get the winding direction of the polygon inline winding_direction winding() const { return polygon_traits::winding(*t); @@ -1618,7 +1616,7 @@ namespace boost { namespace polygon{ struct geometry_concept > { typedef polygon_45_concept type; }; - + template struct view_of { const T* t; @@ -1633,18 +1631,18 @@ namespace boost { namespace polygon{ return compact_iterator_type(polygon_traits::begin_points(*t), polygon_traits::end_points(*t)); } - + /// Get the end iterator inline compact_iterator_type end_compact() const { return compact_iterator_type(polygon_traits::end_points(*t), polygon_traits::end_points(*t)); } - + /// Get the number of sides of the polygon inline std::size_t size() const { return polygon_traits::size(*t); } - + /// Get the winding direction of the polygon inline winding_direction winding() const { return polygon_traits::winding(*t); @@ -1689,26 +1687,26 @@ namespace boost { namespace polygon{ inline bool operator!=(const iterator_holes_type& that) const { return (internal_itr != that.internal_itr); } - inline value_type operator*() const { + inline value_type operator*() const { return view_as(*internal_itr); } }; - + /// Get the begin iterator inline iterator_type begin() const { return polygon_traits::begin_points(*t); } - + /// Get the end iterator inline iterator_type end() const { return polygon_traits::end_points(*t); } - + /// Get the number of sides of the polygon inline std::size_t size() const { return polygon_traits::size(*t); } - + /// Get the winding direction of the polygon inline winding_direction winding() const { return polygon_traits::winding(*t); @@ -1718,24 +1716,24 @@ namespace boost { namespace polygon{ inline iterator_holes_type begin_holes() const { return polygon_with_holes_traits::begin_holes(*t); } - + /// Get the end iterator inline iterator_holes_type end_holes() const { return polygon_with_holes_traits::end_holes(*t); } - + /// Get the number of sides of the polygon inline std::size_t size_holes() const { return polygon_with_holes_traits::size_holes(*t); } - + }; template struct geometry_concept > { typedef polygon_45_with_holes_concept type; }; - + template struct view_of { const T* t; @@ -1770,28 +1768,28 @@ namespace boost { namespace polygon{ inline bool operator!=(const iterator_holes_type& that) const { return (internal_itr != that.internal_itr); } - inline value_type operator*() const { + inline value_type operator*() const { return view_as(*internal_itr); } }; - + /// Get the begin iterator inline compact_iterator_type begin_compact() const { return compact_iterator_type(polygon_traits::begin_points(*t), polygon_traits::end_points(*t)); } - + /// Get the end iterator inline compact_iterator_type end_compact() const { return compact_iterator_type(polygon_traits::end_points(*t), polygon_traits::end_points(*t)); } - + /// Get the number of sides of the polygon inline std::size_t size() const { return polygon_traits::size(*t); } - + /// Get the winding direction of the polygon inline winding_direction winding() const { return polygon_traits::winding(*t); @@ -1801,17 +1799,17 @@ namespace boost { namespace polygon{ inline iterator_holes_type begin_holes() const { return polygon_with_holes_traits::begin_holes(*t); } - + /// Get the end iterator inline iterator_holes_type end_holes() const { return polygon_with_holes_traits::end_holes(*t); } - + /// Get the number of sides of the polygon inline std::size_t size_holes() const { return polygon_with_holes_traits::size_holes(*t); } - + }; template @@ -1831,17 +1829,17 @@ namespace boost { namespace polygon{ inline iterator_type begin() const { return polygon_traits::begin_points(*t); } - + /// Get the end iterator inline iterator_type end() const { return polygon_traits::end_points(*t); } - + /// Get the number of sides of the polygon inline std::size_t size() const { return polygon_traits::size(*t); } - + /// Get the winding direction of the polygon inline winding_direction winding() const { return polygon_traits::winding(*t); @@ -1856,4 +1854,3 @@ namespace boost { namespace polygon{ } #endif - diff --git a/3party/boost/boost/polygon/polygon_with_holes_data.hpp b/3party/boost/boost/polygon/polygon_with_holes_data.hpp index e5a975bbdf..a1a0e1dd2a 100644 --- a/3party/boost/boost/polygon/polygon_with_holes_data.hpp +++ b/3party/boost/boost/polygon/polygon_with_holes_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -18,7 +18,7 @@ public: typedef T coordinate_type; typedef typename polygon_data::iterator_type iterator_type; typedef typename std::list >::const_iterator iterator_holes_type; - typedef polygon_data hole_type; + typedef polygon_data hole_type; typedef typename coordinate_traits::coordinate_distance area_type; typedef point_data point_type; @@ -55,9 +55,9 @@ public: } // copy constructor (since we have dynamic memory) - inline polygon_with_holes_data(const polygon_with_holes_data& that) : self_(that.self_), + inline polygon_with_holes_data(const polygon_with_holes_data& that) : self_(that.self_), holes_(that.holes_) {} - + // assignment operator (since we have dynamic memory do a deep copy) inline polygon_with_holes_data& operator=(const polygon_with_holes_data& that) { self_ = that.self_; @@ -80,7 +80,7 @@ public: inline std::size_t size() const { return self_.size(); - } + } // get begin iterator, returns a pointer to a const polygon inline const iterator_holes_type begin_holes() const { @@ -98,11 +98,10 @@ public: public: polygon_data self_; - std::list holes_; + std::list holes_; }; - + } } #endif - diff --git a/3party/boost/boost/polygon/rectangle_concept.hpp b/3party/boost/boost/polygon/rectangle_concept.hpp index e302b99c90..13aee46fa4 100644 --- a/3party/boost/boost/polygon/rectangle_concept.hpp +++ b/3party/boost/boost/polygon/rectangle_concept.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -25,7 +25,7 @@ namespace boost { namespace polygon{ struct rectangle_concept {}; - + template struct is_rectangle_concept { typedef gtl_no type; }; template <> @@ -62,8 +62,8 @@ namespace boost { namespace polygon{ template struct rectangle_difference_type_by_concept { typedef void type; }; template - struct rectangle_difference_type_by_concept { - typedef typename coordinate_traits::coordinate_type>::coordinate_difference type; }; + struct rectangle_difference_type_by_concept { + typedef typename coordinate_traits::coordinate_type>::coordinate_difference type; }; template struct rectangle_difference_type { @@ -74,8 +74,8 @@ namespace boost { namespace polygon{ template struct rectangle_distance_type_by_concept { typedef void type; }; template - struct rectangle_distance_type_by_concept { - typedef typename coordinate_traits::coordinate_type>::coordinate_distance type; }; + struct rectangle_distance_type_by_concept { + typedef typename coordinate_traits::type>::coordinate_distance type; }; template struct rectangle_distance_type { @@ -83,91 +83,92 @@ namespace boost { namespace polygon{ T, typename is_rectangle_concept::type>::type>::type type; }; + struct y_r_get_interval : gtl_yes {}; + template - typename rectangle_interval_type::type - get(const T& rectangle, orientation_2d orient, - typename enable_if< typename gtl_if::type>::type>::type>::type * = 0 - ) { - return rectangle_traits::get(rectangle, orient); + typename enable_if< typename gtl_and::type>::type>::type, + typename rectangle_interval_type::type>::type + get(const T& rectangle, orientation_2d orient) { + return rectangle_traits::get(rectangle, orient); } struct y_r_h : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, - typename rectangle_traits::interval_type>::type + typename enable_if< typename gtl_and::type>::type>::type, + typename rectangle_interval_type::type>::type horizontal(const T& rectangle) { - return rectangle_traits::get(rectangle, HORIZONTAL); + return rectangle_traits::get(rectangle, HORIZONTAL); } struct y_r_v : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, - typename rectangle_traits::interval_type>::type + typename enable_if< typename gtl_and::type>::type>::type, + typename rectangle_interval_type::type>::type vertical(const T& rectangle) { - return rectangle_traits::get(rectangle, VERTICAL); + return rectangle_traits::get(rectangle, VERTICAL); } struct y_r_set : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - void>::type + void>::type set(T& rectangle, const T2& interval) { - rectangle_mutable_traits::set(rectangle, orient, interval); + rectangle_mutable_traits::set(rectangle, orient, interval); } struct y_r_set2 : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - void>::type + void>::type set(T& rectangle, orientation_2d orient, const T2& interval) { - rectangle_mutable_traits::set(rectangle, orient, interval); + rectangle_mutable_traits::set(rectangle, orient, interval); } struct y_r_h2 : gtl_yes {}; template - typename enable_if< typename gtl_and_3::type>::type, + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - void>::type + void>::type horizontal(T& rectangle, const T2& interval) { - rectangle_mutable_traits::set(rectangle, HORIZONTAL, interval); + rectangle_mutable_traits::set(rectangle, HORIZONTAL, interval); } struct y_r_v2 : gtl_yes {}; template - typename enable_if< - typename gtl_and_3::type>::type, - typename is_interval_concept::type>::type>::type, void>::type + typename enable_if< + typename gtl_and_3::type>::type, + typename is_interval_concept::type>::type>::type, void>::type vertical(T& rectangle, const T2& interval) { - rectangle_mutable_traits::set(rectangle, VERTICAL, interval); + rectangle_mutable_traits::set(rectangle, VERTICAL, interval); } struct y_r_construct : gtl_yes {}; template typename enable_if< typename gtl_and::type>::type>::type, - T>::type + T>::type construct(const T2& interval_horizontal, const T3& interval_vertical) { return rectangle_mutable_traits::construct(interval_horizontal, interval_vertical); } - + struct y_r_construct2 : gtl_yes {}; template typename enable_if< typename gtl_and::type>::type>::type, - T>::type + T>::type construct(coord_type xl, coord_type yl, coord_type xh, coord_type yh) { - return rectangle_mutable_traits::construct(interval_data(xl, xh), - interval_data(yl, yh)); + return rectangle_mutable_traits::construct(interval_data(xl, xh), + interval_data(yl, yh)); } - + struct y_r_cconstruct : gtl_yes {}; template @@ -179,11 +180,11 @@ namespace boost { namespace polygon{ copy_construct(const T2& rectangle) { return construct (get(rectangle, HORIZONTAL), get(rectangle, VERTICAL)); } - + struct y_r_assign : gtl_yes {}; template - typename enable_if< + typename enable_if< typename gtl_and_3< y_r_assign, typename is_mutable_rectangle_concept::type>::type, typename is_rectangle_concept::type>::type>::type, @@ -193,36 +194,36 @@ namespace boost { namespace polygon{ set(lvalue, VERTICAL, get(rvalue, VERTICAL)); return lvalue; } - + struct y_r_equiv : gtl_yes {}; template - typename enable_if< + typename enable_if< typename gtl_and_3< y_r_equiv, typename is_rectangle_concept::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type equivalence(const T& rect1, const T2& rect2) { return equivalence(get(rect1, HORIZONTAL), get(rect2, HORIZONTAL)) && equivalence(get(rect1, VERTICAL), get(rect2, VERTICAL)); } - + struct y_r_get : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, typename rectangle_coordinate_type::type>::type get(const rectangle_type& rectangle, orientation_2d orient, direction_1d dir) { - return get(rectangle_traits::get(rectangle, orient), dir); + return get(rectangle_traits::get(rectangle, orient), dir); } - + struct y_r_set3 : gtl_yes {}; template - typename enable_if::type>::type>::type, void>::type - set(rectangle_type& rectangle, orientation_2d orient, direction_1d dir, - typename rectangle_traits::coordinate_type value) { - typename rectangle_traits::interval_type ivl = get(rectangle, orient); + typename enable_if::type>::type>::type, void>::type + set(rectangle_type& rectangle, orientation_2d orient, direction_1d dir, + typename rectangle_coordinate_type::type value) { + typename rectangle_interval_type::type ivl = get(rectangle, orient); set(ivl, dir, value); set(rectangle, orient, ivl); } @@ -230,7 +231,7 @@ namespace boost { namespace polygon{ struct y_r_xl : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, typename rectangle_coordinate_type::type>::type xl(const rectangle_type& rectangle) { return get(rectangle, HORIZONTAL, LOW); @@ -239,15 +240,15 @@ namespace boost { namespace polygon{ struct y_r_xl2 : gtl_yes {}; template - typename enable_if::type>::type>::type, void>::type - xl(rectangle_type& rectangle, typename rectangle_traits::coordinate_type value) { + typename enable_if::type>::type>::type, void>::type + xl(rectangle_type& rectangle, typename rectangle_coordinate_type::type value) { return set(rectangle, HORIZONTAL, LOW, value); } struct y_r_xh : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, typename rectangle_coordinate_type::type>::type xh(const rectangle_type& rectangle) { return get(rectangle, HORIZONTAL, HIGH); @@ -256,32 +257,32 @@ namespace boost { namespace polygon{ struct y_r_xh2 : gtl_yes {}; template - typename enable_if::type>::type>::type, void>::type - xh(rectangle_type& rectangle, typename rectangle_traits::coordinate_type value) { + typename enable_if::type>::type>::type, void>::type + xh(rectangle_type& rectangle, typename rectangle_coordinate_type::type value) { return set(rectangle, HORIZONTAL, HIGH, value); } struct y_r_yl : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, typename rectangle_coordinate_type::type>::type yl(const rectangle_type& rectangle) { return get(rectangle, VERTICAL, LOW); } - + struct y_r_yl2 : gtl_yes {}; template - typename enable_if::type>::type>::type, void>::type - yl(rectangle_type& rectangle, typename rectangle_traits::coordinate_type value) { + typename enable_if::type>::type>::type, void>::type + yl(rectangle_type& rectangle, typename rectangle_coordinate_type::type value) { return set(rectangle, VERTICAL, LOW, value); } struct y_r_yh : gtl_yes {}; template - typename enable_if< typename gtl_and::type>::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, typename rectangle_coordinate_type::type>::type yh(const rectangle_type& rectangle) { return get(rectangle, VERTICAL, HIGH); @@ -290,45 +291,45 @@ namespace boost { namespace polygon{ struct y_r_yh2 : gtl_yes {}; template - typename enable_if::type>::type>::type, void>::type - yh(rectangle_type& rectangle, typename rectangle_traits::coordinate_type value) { + typename enable_if::type>::type>::type, void>::type + yh(rectangle_type& rectangle, typename rectangle_coordinate_type::type value) { return set(rectangle, VERTICAL, HIGH, value); } struct y_r_ll : gtl_yes {}; template - typename enable_if::type>::type>::type>::type, - point_data::coordinate_type> >::type + typename enable_if::type>::type>::type, + point_data::type> >::type ll(const rectangle_type& rectangle) { - return point_data::coordinate_type> (xl(rectangle), yl(rectangle)); + return point_data::type> (xl(rectangle), yl(rectangle)); } struct y_r_lr : gtl_yes {}; template - typename enable_if::type>::type>::type>::type, - point_data::coordinate_type> >::type + typename enable_if::type>::type>::type, + point_data::type> >::type lr(const rectangle_type& rectangle) { - return point_data::coordinate_type> (xh(rectangle), yl(rectangle)); + return point_data::type> (xh(rectangle), yl(rectangle)); } struct y_r_ul : gtl_yes {}; template - typename enable_if::type>::type>::type>::type, - point_data::coordinate_type> >::type + typename enable_if::type>::type>::type, + point_data::type> >::type ul(const rectangle_type& rectangle) { - return point_data::coordinate_type> (xl(rectangle), yh(rectangle)); + return point_data::type> (xl(rectangle), yh(rectangle)); } struct y_r_ur : gtl_yes {}; template - typename enable_if::type>::type>::type>::type, - point_data::coordinate_type> >::type + typename enable_if::type>::type>::type, + point_data::type> >::type ur(const rectangle_type& rectangle) { - return point_data::coordinate_type> (xh(rectangle), yh(rectangle)); + return point_data::type> (xh(rectangle), yh(rectangle)); } struct y_r_contains : gtl_yes {}; @@ -336,8 +337,8 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type - contains(const rectangle_type& rectangle, const rectangle_type_2 rectangle_contained, + bool>::type + contains(const rectangle_type& rectangle, const rectangle_type_2 rectangle_contained, bool consider_touch = true) { return contains(horizontal(rectangle), horizontal(rectangle_contained), consider_touch) && contains(vertical(rectangle), vertical(rectangle_contained), consider_touch); @@ -347,8 +348,8 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, - typename is_point_concept::type>::type>::type, bool>::type - contains(const rectangle_type& rectangle, const point_type point_contained, + typename is_point_concept::type>::type>::type, bool>::type + contains(const rectangle_type& rectangle, const point_type point_contained, bool consider_touch = true) { return contains(horizontal(rectangle), x(point_contained), consider_touch) && contains(vertical(rectangle), y(point_contained), consider_touch); @@ -359,30 +360,31 @@ namespace boost { namespace polygon{ // set all four coordinates based upon two points template typename enable_if< typename gtl_and_4< y_r_set_points, - typename is_mutable_rectangle_concept::type>::type, - typename is_point_concept::type>::type, - typename is_point_concept::type>::type>::type, + typename is_mutable_rectangle_concept::type>::type, + typename is_point_concept::type>::type, + typename is_point_concept::type>::type>::type, rectangle_type>::type & set_points(rectangle_type& rectangle, const point_type_1& p1, const point_type_2& p2) { - typedef typename rectangle_traits::coordinate_type Unit; + typedef typename rectangle_coordinate_type::type Unit; Unit x1(x(p1)); Unit x2(x(p2)); Unit y1(y(p1)); Unit y2(y(p2)); - horizontal(rectangle, construct::interval_type>(x1, x2)); - vertical(rectangle, construct::interval_type>(y1, y2)); + horizontal(rectangle, construct::type>(x1, x2)); + vertical(rectangle, construct::type>(y1, y2)); return rectangle; } - + + struct y_r_move : gtl_yes {}; + // move rectangle by delta in orient template - rectangle_type& - move(rectangle_type& rectangle, orientation_2d orient, - typename coordinate_traits::coordinate_type>::coordinate_difference delta, - typename enable_if::type>::type>::type * = 0 - ) { - typename rectangle_traits::interval_type ivl = get(rectangle, orient); + typename enable_if< typename gtl_and::type>::type>::type, + rectangle_type>::type & + move(rectangle_type& rectangle, orientation_2d orient, + typename coordinate_traits::type>::coordinate_difference delta) { + typename rectangle_interval_type::type ivl = get(rectangle, orient); move(ivl, delta); set(rectangle, orient, ivl); return rectangle; @@ -394,18 +396,18 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3< y_r_convolve, - typename is_mutable_rectangle_concept::type>::type, - typename is_rectangle_concept::type>::type>::type, + typename is_mutable_rectangle_concept::type>::type, + typename is_rectangle_concept::type>::type>::type, rectangle_type_1>::type & convolve(rectangle_type_1& rectangle, const rectangle_type_2& convolution_rectangle) { - typename rectangle_traits::interval_type ivl = horizontal(rectangle); + typename rectangle_interval_type::type ivl = horizontal(rectangle); horizontal(rectangle, convolve(ivl, horizontal(convolution_rectangle))); ivl = vertical(rectangle); vertical(rectangle, convolve(ivl, vertical(convolution_rectangle))); return rectangle; } - + struct y_r_deconvolve : gtl_yes {}; // deconvolve this with b @@ -415,13 +417,13 @@ namespace boost { namespace polygon{ typename is_rectangle_concept::type>::type>::type, rectangle_type_1>::type & deconvolve(rectangle_type_1& rectangle, const rectangle_type_2& convolution_rectangle) { - typename rectangle_traits::interval_type ivl = horizontal(rectangle); + typename rectangle_interval_type::type ivl = horizontal(rectangle); horizontal(rectangle, deconvolve(ivl, horizontal(convolution_rectangle))); ivl = vertical(rectangle); vertical(rectangle, deconvolve(ivl, vertical(convolution_rectangle))); return rectangle; } - + struct y_r_reconvolve : gtl_yes {}; // reflectedConvolve this with b @@ -431,13 +433,13 @@ namespace boost { namespace polygon{ typename is_rectangle_concept::type>::type>::type, rectangle_type_1>::type & reflected_convolve(rectangle_type_1& rectangle, const rectangle_type_2& convolution_rectangle) { - typename rectangle_traits::interval_type ivl = horizontal(rectangle); + typename rectangle_interval_type::type ivl = horizontal(rectangle); horizontal(rectangle, reflected_convolve(ivl, horizontal(convolution_rectangle))); ivl = vertical(rectangle); vertical(rectangle, reflected_convolve(ivl, vertical(convolution_rectangle))); return rectangle; } - + struct y_r_redeconvolve : gtl_yes {}; // reflectedDeconvolve this with b @@ -448,13 +450,13 @@ namespace boost { namespace polygon{ typename is_rectangle_concept::type>::type>::type, rectangle_type_1>::type & reflected_deconvolve(rectangle_type_1& rectangle, const rectangle_type_2& convolution_rectangle) { - typename rectangle_traits::interval_type ivl = horizontal(rectangle); + typename rectangle_interval_type::type ivl = horizontal(rectangle); horizontal(rectangle, reflected_deconvolve(ivl, horizontal(convolution_rectangle))); ivl = vertical(rectangle); vertical(rectangle, reflected_deconvolve(ivl, vertical(convolution_rectangle))); return rectangle; } - + struct y_r_convolve2 : gtl_yes {}; // convolve with point @@ -463,7 +465,7 @@ namespace boost { namespace polygon{ typename is_point_concept::type>::type>::type, rectangle_type>::type & convolve(rectangle_type& rectangle, const point_type& convolution_point) { - typename rectangle_traits::interval_type ivl = horizontal(rectangle); + typename rectangle_interval_type::type ivl = horizontal(rectangle); horizontal(rectangle, convolve(ivl, x(convolution_point))); ivl = vertical(rectangle); vertical(rectangle, convolve(ivl, y(convolution_point))); @@ -474,11 +476,11 @@ namespace boost { namespace polygon{ // deconvolve with point template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_point_concept::type>::type>::type, rectangle_type>::type & deconvolve(rectangle_type& rectangle, const point_type& convolution_point) { - typename rectangle_traits::interval_type ivl = horizontal(rectangle); + typename rectangle_interval_type::type ivl = horizontal(rectangle); horizontal(rectangle, deconvolve(ivl, x(convolution_point))); ivl = vertical(rectangle); vertical(rectangle, deconvolve(ivl, y(convolution_point))); @@ -489,7 +491,7 @@ namespace boost { namespace polygon{ // get the magnitude of the interval range depending on orient template - typename enable_if< typename gtl_and::type>::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, typename rectangle_difference_type::type>::type delta(const rectangle_type& rectangle, orientation_2d orient) { return delta(get(rectangle, orient)); @@ -500,9 +502,9 @@ namespace boost { namespace polygon{ // get the area of the rectangle template typename enable_if< typename gtl_and::type>::type>::type, - typename coordinate_traits::coordinate_type>::manhattan_area_type>::type + typename coordinate_traits::type>::manhattan_area_type>::type area(const rectangle_type& rectangle) { - typedef typename coordinate_traits::coordinate_type>::manhattan_area_type area_type; + typedef typename coordinate_traits::type>::manhattan_area_type area_type; return (area_type)delta(rectangle, HORIZONTAL) * (area_type)delta(rectangle, VERTICAL); } @@ -510,8 +512,8 @@ namespace boost { namespace polygon{ // returns the orientation of the longest side template - typename enable_if::type>::type>::type, - orientation_2d>::type + typename enable_if::type>::type>::type, + orientation_2d>::type guess_orientation(const rectangle_type& rectangle) { return delta(rectangle, HORIZONTAL) >= delta(rectangle, VERTICAL) ? HORIZONTAL : VERTICAL; @@ -521,18 +523,19 @@ namespace boost { namespace polygon{ // get the half perimeter of the rectangle template - typename enable_if< typename gtl_and::type>::type>::type>::type, + typename enable_if< typename gtl_and::type>::type>::type, typename rectangle_difference_type::type>::type half_perimeter(const rectangle_type& rectangle) { return delta(rectangle, HORIZONTAL) + delta(rectangle, VERTICAL); } - + + struct y_r_perimeter : gtl_yes {}; + // get the perimeter of the rectangle template - typename rectangle_difference_type::type - perimeter(const rectangle_type& rectangle, - typename enable_if< typename is_rectangle_concept::type>::type>::type * = 0 - ) { + typename enable_if< typename gtl_and::type>::type>::type, + typename rectangle_difference_type::type>::type + perimeter(const rectangle_type& rectangle) { return 2 * half_perimeter(rectangle); } @@ -543,10 +546,10 @@ namespace boost { namespace polygon{ // [in] considerTouch If true, return true even if b touches the boundary // [ret] . true if `t` intersects b template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type intersects(const rectangle_type_1& rectangle, const rectangle_type_2& b, bool consider_touch = true) { return intersects(horizontal(rectangle), horizontal(b), consider_touch) && intersects(vertical(rectangle), vertical(b), consider_touch); @@ -559,44 +562,44 @@ namespace boost { namespace polygon{ // [in] considerTouch If true, return true even if p is on the foundary // [ret] . true if `t` contains p template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type boundaries_intersect(const rectangle_type_1& rectangle, const rectangle_type_2& b, bool consider_touch = true) { return (intersects(rectangle, b, consider_touch) && !(contains(rectangle, b, !consider_touch)) && !(contains(b, rectangle, !consider_touch))); } - + struct y_r_b_abuts : gtl_yes {}; // check if b is touching 'this' on the end specified by dir template typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type abuts(const rectangle_type_1& rectangle, const rectangle_type_2& b, direction_2d dir) { - return + return abuts(get(rectangle, orientation_2d(dir)), get(b, orientation_2d(dir)), direction_1d(dir)) && intersects(get(rectangle, orientation_2d(dir).get_perpendicular()), get(b, orientation_2d(dir).get_perpendicular()), true); } - + struct y_r_b_abuts2 : gtl_yes {}; // check if they are touching in the given orientation template typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type abuts(const rectangle_type_1& rectangle, const rectangle_type_2& b, orientation_2d orient) { - return + return abuts(get(rectangle, orient), get(b, orient)) && intersects(get(rectangle, orient.get_perpendicular()), get(b, orient.get_perpendicular()), true); @@ -608,7 +611,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type abuts(const rectangle_type_1& rectangle, const rectangle_type_2& b) { return abuts(rectangle, b, HORIZONTAL) || abuts(rectangle, b, VERTICAL); } @@ -617,13 +620,13 @@ namespace boost { namespace polygon{ // intersect rectangle with interval on orient template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_interval_concept::type>::type>::type, - bool>::type + bool>::type intersect(rectangle_type& rectangle, const interval_type& b, orientation_2d orient, bool consider_touch = true) { - typename rectangle_traits::interval_type ivl = get(rectangle, orient); + typename rectangle_interval_type::type ivl = get(rectangle, orient); if(intersect(ivl, b, consider_touch)) { set(rectangle, orient, ivl); return true; @@ -637,7 +640,7 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type intersect(rectangle_type_1& rectangle, const rectangle_type_2& b, bool consider_touch = true) { if(intersects(rectangle, b)) { intersect(rectangle, horizontal(b), HORIZONTAL, consider_touch); @@ -656,7 +659,7 @@ namespace boost { namespace polygon{ typename is_rectangle_concept::type>::type>::type, rectangle_type_1>::type & generalized_intersect(rectangle_type_1& rectangle, const rectangle_type_2& b) { - typename rectangle_traits::interval_type ivl = get(rectangle, HORIZONTAL); + typename rectangle_interval_type::type ivl = get(rectangle, HORIZONTAL); generalized_intersect(ivl, horizontal(b)); horizontal(rectangle, ivl); ivl = vertical(rectangle); @@ -669,11 +672,11 @@ namespace boost { namespace polygon{ // bloat the interval specified by orient by bloating template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & - bloat(rectangle_type& rectangle, orientation_2d orient, - typename rectangle_traits::coordinate_type bloating) { - typename rectangle_traits::interval_type ivl = get(rectangle, orient); + bloat(rectangle_type& rectangle, orientation_2d orient, + typename rectangle_coordinate_type::type bloating) { + typename rectangle_interval_type::type ivl = get(rectangle, orient); bloat(ivl, bloating); set(rectangle, orient, ivl); return rectangle; @@ -683,10 +686,10 @@ namespace boost { namespace polygon{ // bloat the Rectangle by bloating template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & bloat(rectangle_type& rectangle, - typename rectangle_traits::coordinate_type bloating) { + typename rectangle_coordinate_type::type bloating) { bloat(rectangle, HORIZONTAL, bloating); return bloat(rectangle, VERTICAL, bloating); } @@ -695,11 +698,11 @@ namespace boost { namespace polygon{ // bloat the interval cooresponding to orient by bloating in dir direction template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & bloat(rectangle_type& rectangle, direction_2d dir, - typename rectangle_traits::coordinate_type bloating) { - typename rectangle_traits::interval_type ivl = get(rectangle, orientation_2d(dir)); + typename rectangle_coordinate_type::type bloating) { + typename rectangle_interval_type::type ivl = get(rectangle, orientation_2d(dir)); bloat(ivl, direction_1d(dir), bloating); set(rectangle, orientation_2d(dir), ivl); return rectangle; @@ -709,10 +712,10 @@ namespace boost { namespace polygon{ // shrink the interval specified by orient by bloating template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & - shrink(rectangle_type& rectangle, orientation_2d orient, - typename rectangle_traits::coordinate_type shrinking) { + shrink(rectangle_type& rectangle, orientation_2d orient, + typename rectangle_coordinate_type::type shrinking) { return bloat(rectangle, orient, -shrinking); } @@ -720,10 +723,10 @@ namespace boost { namespace polygon{ // shrink the Rectangle by bloating template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & - shrink(rectangle_type& rectangle, - typename rectangle_traits::coordinate_type shrinking) { + shrink(rectangle_type& rectangle, + typename rectangle_coordinate_type::type shrinking) { return bloat(rectangle, -shrinking); } @@ -731,10 +734,10 @@ namespace boost { namespace polygon{ // shrink the interval cooresponding to orient by bloating in dir direction template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & shrink(rectangle_type& rectangle, direction_2d dir, - typename rectangle_traits::coordinate_type shrinking) { + typename rectangle_coordinate_type::type shrinking) { return bloat(rectangle, dir, -shrinking); } @@ -742,13 +745,13 @@ namespace boost { namespace polygon{ // encompass interval on orient template - typename enable_if< - typename gtl_and_3::type>::type, - typename is_interval_concept::type>::type>::type, - bool>::type - encompass(rectangle_type& rectangle, const interval_type& b, - orientation_2d orient) { - typename rectangle_traits::interval_type ivl = get(rectangle, orient); + typename enable_if::type>::type, + typename is_interval_concept::type>::type>::type, + bool>::type + encompass(rectangle_type& rectangle, const interval_type& b, orientation_2d orient) { + typename rectangle_interval_type::type ivl = get(rectangle, orient); if(encompass(ivl, b)) { set(rectangle, orient, ivl); return true; @@ -760,12 +763,12 @@ namespace boost { namespace polygon{ // enlarge rectangle to encompass the Rectangle b template - bool - encompass(rectangle_type_1& rectangle, const rectangle_type_2& b, - typename enable_if< typename gtl_and_3::type>::type, - typename is_rectangle_concept::type>::type >::type>::type * = 0 - ) { + typename enable_if< typename gtl_and_3< + y_r_encompass2, + typename is_mutable_rectangle_concept::type>::type, + typename is_rectangle_concept::type>::type >::type, + bool>::type + encompass(rectangle_type_1& rectangle, const rectangle_type_2& b) { //note that operator | is intentional because both should be called regardless return encompass(rectangle, horizontal(b), HORIZONTAL) | encompass(rectangle, vertical(b), VERTICAL); @@ -775,16 +778,13 @@ namespace boost { namespace polygon{ // enlarge rectangle to encompass the point b template - typename enable_if< - typename gtl_and_3::type>::type, - typename is_point_concept::type>::type>::type, - bool>::type - encompass(rectangle_type_1& rectangle, const point_type& b, - typename enable_if< - typename gtl_and< typename is_mutable_rectangle_concept::type>::type, - typename is_point_concept::type>::type>::type>::type * = 0 - ) { - typename rectangle_traits::interval_type hivl, vivl; + typename enable_if::type>::type, + typename is_point_concept::type>::type>::type, + bool>::type + encompass(rectangle_type_1& rectangle, const point_type& b) { + typename rectangle_interval_type::type hivl, vivl; hivl = horizontal(rectangle); vivl = vertical(rectangle); //note that operator | is intentional because both should be called regardless @@ -803,7 +803,7 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type center(point_type& center_point, const rectangle_type& rectangle) { center_point = construct(center(horizontal(rectangle)), center(vertical(rectangle))); @@ -816,9 +816,9 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type get_corner(point_type& corner_point, const rectangle_type& rectangle, direction_2d direction_facing, direction_1d direction_turning) { - typedef typename rectangle_traits::coordinate_type Unit; + typedef typename rectangle_coordinate_type::type Unit; Unit u1 = get(rectangle, direction_facing); Unit u2 = get(rectangle, direction_facing.turn(direction_turning)); if(orientation_2d(direction_facing).to_int()) std::swap(u1, u2); @@ -829,8 +829,8 @@ namespace boost { namespace polygon{ struct y_r_get_half : gtl_yes {}; template - typename enable_if::type>::type>::type, - rectangle_type>::type + typename enable_if::type>::type>::type, + rectangle_type>::type get_half(const rectangle_type& rectangle, direction_2d dir) { rectangle_type retval(rectangle); set(retval, orientation_2d(dir), get_half(get(rectangle, orientation_2d(dir)), direction_1d(dir))); @@ -842,10 +842,10 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type join_with(rectangle_type_1& rectangle, const rectangle_type_2& b) { - typedef typename rectangle_traits::interval_type Interval1; - typedef typename rectangle_traits::interval_type Interval2; + typedef typename rectangle_interval_type::type Interval1; + typedef typename rectangle_interval_type::type Interval2; Interval1 hi1 = get(rectangle, HORIZONTAL); Interval1 vi1 = get(rectangle, VERTICAL); Interval2 hi2 = get(b, HORIZONTAL), vi2 = get(b, VERTICAL); @@ -860,7 +860,7 @@ namespace boost { namespace polygon{ } return false; } - + struct y_r_eda2 : gtl_yes {}; template @@ -875,8 +875,8 @@ namespace boost { namespace polygon{ struct y_r_eda : gtl_yes {}; template - typename enable_if< - typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, typename rectangle_difference_type::type>::type @@ -887,12 +887,12 @@ namespace boost { namespace polygon{ struct y_r_sed : gtl_yes {}; template - typename enable_if< typename gtl_if< typename gtl_and_3::type>::type, - typename is_point_concept::type>::type>::type>::type, + typename is_point_concept::type>::type>::type, typename rectangle_difference_type::type>::type square_euclidean_distance(rectangle_type& lvalue, const point_type& rvalue) { - typename coordinate_traits::coordinate_type>::coordinate_difference xdist, ydist; + typename coordinate_traits::type>::coordinate_difference xdist, ydist; xdist = euclidean_distance(lvalue, rvalue, HORIZONTAL); ydist = euclidean_distance(lvalue, rvalue, VERTICAL); return (xdist * xdist) + (ydist * ydist); @@ -901,12 +901,12 @@ namespace boost { namespace polygon{ struct y_r_sed2 : gtl_yes {}; template - typename enable_if< - typename gtl_and_3::type>::type, - typename is_rectangle_concept< typename geometry_concept::type>::type>::type, + typename enable_if< + typename gtl_and_3::type>::type, + typename is_rectangle_concept< typename geometry_concept::type>::type>::type, typename rectangle_difference_type::type>::type square_euclidean_distance(const rectangle_type& lvalue, const rectangle_type_2& rvalue) { - typename coordinate_traits::coordinate_type>::coordinate_difference xdist, ydist; + typename coordinate_traits::type>::coordinate_difference xdist, ydist; xdist = euclidean_distance(lvalue, rvalue, HORIZONTAL); ydist = euclidean_distance(lvalue, rvalue, VERTICAL); return (xdist * xdist) + (ydist * ydist); @@ -917,10 +917,9 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_point_concept::type>::type>::type, - typename rectangle_distance_type::type>::type + typename rectangle_distance_type::type>::type euclidean_distance(rectangle_type& lvalue, const point_type& rvalue) { - return sqrt((double) - (square_euclidean_distance(lvalue, rvalue))); + return std::sqrt((double)(square_euclidean_distance(lvalue, rvalue))); } struct y_r_edist2 : gtl_yes {}; @@ -928,21 +927,21 @@ namespace boost { namespace polygon{ template typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, - typename rectangle_distance_type::type>::type + typename rectangle_distance_type::type>::type euclidean_distance(const rectangle_type& lvalue, const rectangle_type_2& rvalue) { double val = (int)square_euclidean_distance(lvalue, rvalue); - return sqrt(val); + return std::sqrt(val); } struct y_r_mdist : gtl_yes {}; template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_point_concept::type>::type>::type, typename rectangle_difference_type::type>::type manhattan_distance(rectangle_type& lvalue, const point_type& rvalue) { - typename coordinate_traits::coordinate_type>::coordinate_difference xdist, ydist; + typename coordinate_traits::type>::coordinate_difference xdist, ydist; xdist = euclidean_distance(lvalue, rvalue, HORIZONTAL); ydist = euclidean_distance(lvalue, rvalue, VERTICAL); return xdist + ydist; @@ -951,12 +950,12 @@ namespace boost { namespace polygon{ struct y_r_mdist2 : gtl_yes {}; template - typename enable_if< + typename enable_if< typename gtl_and_3::type>::type, typename is_rectangle_concept::type>::type>::type, typename rectangle_difference_type::type>::type manhattan_distance(const rectangle_type& lvalue, const rectangle_type_2& rvalue) { - typename coordinate_traits::coordinate_type>::coordinate_difference xdist, ydist; + typename coordinate_traits::type>::coordinate_difference xdist, ydist; xdist = euclidean_distance(lvalue, rvalue, HORIZONTAL); ydist = euclidean_distance(lvalue, rvalue, VERTICAL); return xdist + ydist; @@ -965,22 +964,22 @@ namespace boost { namespace polygon{ struct y_r_scale_up : gtl_yes {}; template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & - scale_up(rectangle_type& rectangle, - typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { + scale_up(rectangle_type& rectangle, + typename coordinate_traits::type>::unsigned_area_type factor) { horizontal(rectangle, scale_up(horizontal(rectangle), factor)); vertical(rectangle, scale_up(vertical(rectangle), factor)); return rectangle; } - + struct y_r_scale_down : gtl_yes {}; - + template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & - scale_down(rectangle_type& rectangle, - typename coordinate_traits::coordinate_type>::unsigned_area_type factor) { + scale_down(rectangle_type& rectangle, + typename coordinate_traits::type>::unsigned_area_type factor) { horizontal(rectangle, scale_down(horizontal(rectangle), factor)); vertical(rectangle, scale_down(vertical(rectangle), factor)); return rectangle; @@ -989,31 +988,31 @@ namespace boost { namespace polygon{ struct y_r_scale : gtl_yes {}; template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & scale(rectangle_type& rectangle, const scaling_type& scaling) { - point_data::coordinate_type> llp(xl(rectangle), yl(rectangle)); - point_data::coordinate_type> urp(xl(rectangle), yl(rectangle)); + point_data::type> llp(xl(rectangle), yl(rectangle)); + point_data::type> urp(xl(rectangle), yl(rectangle)); scale(llp, scaling); scale(urp, scaling); set_points(rectangle, llp, urp); return rectangle; } - + struct y_r_transform : gtl_yes {}; - + template - typename enable_if::type>::type>::type, + typename enable_if::type>::type>::type, rectangle_type>::type & transform(rectangle_type& rectangle, const transformation_type& transformation) { - point_data::coordinate_type> llp(xl(rectangle), yl(rectangle)); - point_data::coordinate_type> urp(xh(rectangle), yh(rectangle)); + point_data::type> llp(xl(rectangle), yl(rectangle)); + point_data::type> urp(xh(rectangle), yh(rectangle)); transform(llp, transformation); transform(urp, transformation); set_points(rectangle, llp, urp); return rectangle; } - + template class less_rectangle_concept { private: @@ -1023,12 +1022,12 @@ namespace boost { namespace polygon{ typename enable_if< typename gtl_and< typename is_rectangle_concept::type>::type, typename is_rectangle_concept::type>::type>::type, - bool>::type + bool>::type operator () (const rectangle_type_1& a, const rectangle_type_2& b) const { - typedef typename rectangle_traits::coordinate_type Unit; - Unit vl1 = get(get(a, orient_), LOW); - Unit vl2 = get(get(b, orient_), LOW); + typedef typename rectangle_coordinate_type::type Unit; + Unit vl1 = get(get(a, orient_), LOW); + Unit vl2 = get(get(b, orient_), LOW); if(vl1 > vl2) return false; if(vl1 == vl2) { orientation_2d perp = orient_.get_perpendicular(); @@ -1036,8 +1035,8 @@ namespace boost { namespace polygon{ Unit hl2 = get(get(b, perp), LOW); if(hl1 > hl2) return false; if(hl1 == hl2) { - Unit vh1 = get(get(a, orient_), HIGH); - Unit vh2 = get(get(b, orient_), HIGH); + Unit vh1 = get(get(a, orient_), HIGH); + Unit vh2 = get(get(b, orient_), HIGH); if(vh1 > vh2) return false; if(vh1 == vh2) { Unit hh1 = get(get(a, perp), HIGH); @@ -1048,7 +1047,7 @@ namespace boost { namespace polygon{ } return true; } - + }; template @@ -1063,7 +1062,7 @@ namespace boost { namespace polygon{ assign(*this, rvalue); return *this; } - + template template bool rectangle_data::operator==(const T2& rvalue) const { @@ -1077,4 +1076,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/rectangle_data.hpp b/3party/boost/boost/polygon/rectangle_data.hpp index 2bcbb461d8..5a1f99e611 100644 --- a/3party/boost/boost/polygon/rectangle_data.hpp +++ b/3party/boost/boost/polygon/rectangle_data.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -52,13 +52,12 @@ public: return ranges_[orientation_2d(dir).to_int()].set(direction_1d(dir), value); } template - inline void set(orientation_2d orient, const interval_type_1& interval); + inline void set(orientation_2d orient, const interval_type_1& interval); private: - interval_data ranges_[2]; + interval_data ranges_[2]; }; } } #endif - diff --git a/3party/boost/boost/polygon/rectangle_traits.hpp b/3party/boost/boost/polygon/rectangle_traits.hpp index fe777a4fe1..25d934b18f 100644 --- a/3party/boost/boost/polygon/rectangle_traits.hpp +++ b/3party/boost/boost/polygon/rectangle_traits.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -35,4 +35,3 @@ namespace boost { namespace polygon{ } } #endif - diff --git a/3party/boost/boost/polygon/segment_concept.hpp b/3party/boost/boost/polygon/segment_concept.hpp new file mode 100644 index 0000000000..8d8aaa19e2 --- /dev/null +++ b/3party/boost/boost/polygon/segment_concept.hpp @@ -0,0 +1,754 @@ +/* + Copyright 2008 Intel Corporation + + Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +*/ +#ifndef BOOST_POLYGON_SEGMENT_CONCEPT_HPP +#define BOOST_POLYGON_SEGMENT_CONCEPT_HPP + +#include "isotropy.hpp" +#include "segment_data.hpp" +#include "segment_traits.hpp" +#include "rectangle_concept.hpp" + +namespace boost { +namespace polygon { +struct segment_concept {}; + +template +struct is_segment_concept { + typedef gtl_no type; +}; + +template <> +struct is_segment_concept { + typedef gtl_yes type; +}; + +template +struct is_mutable_segment_concept { + typedef gtl_no type; +}; + +template <> +struct is_mutable_segment_concept { + typedef gtl_yes type; +}; + +template +struct segment_distance_type_by_concept { + typedef void type; +}; + +template +struct segment_distance_type_by_concept { + typedef typename coordinate_traits< + typename segment_traits::coordinate_type + >::coordinate_distance type; +}; + +template +struct segment_distance_type { + typedef typename segment_distance_type_by_concept< + Segment, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type type; +}; + +template +struct segment_point_type_by_concept { + typedef void type; +}; + +template +struct segment_point_type_by_concept { + typedef typename segment_traits::point_type type; +}; + +template +struct segment_point_type { + typedef typename segment_point_type_by_concept< + Segment, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type type; +}; + +template +struct segment_coordinate_type_by_concept { + typedef void type; +}; + +template +struct segment_coordinate_type_by_concept { + typedef typename segment_traits::coordinate_type type; +}; + +template +struct segment_coordinate_type { + typedef typename segment_coordinate_type_by_concept< + Segment, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type type; +}; + +struct y_s_get : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_get, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + typename segment_point_type::type +>::type +get(const Segment& segment, direction_1d dir) { + return segment_traits::get(segment, dir); +} + +struct y_s_set : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_set, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + void +>::type +set(Segment& segment, direction_1d dir, const Point& point) { + segment_mutable_traits::set(segment, dir, point); +} + +struct y_s_construct : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_4< + y_s_construct, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type +construct(const Point1& low, const Point2& high) { + return segment_mutable_traits::construct(low, high); +} + +struct y_s_copy_construct : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_copy_construct, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + Segment1 +>::type +copy_construct(const Segment2& segment) { + return construct(get(segment, LOW), get(segment, HIGH)); +} + +struct y_s_assign : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_assign, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + Segment1 +>::type & +assign(Segment1& segment1, const Segment2& segment2) { + return segment1 = copy_construct(segment2); +} + +struct y_s_equivalence : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_equivalence, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + bool +>::type +equivalence(const Segment1& segment1, const Segment2& segment2) { + return get(segment1, LOW) == get(segment2, LOW) && + get(segment1, HIGH) == get(segment2, HIGH); +} + +struct y_s_low : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_low, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + typename segment_point_type::type +>::type +low(const Segment& segment) { + return get(segment, LOW); +} + +struct y_s_high : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_high, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + typename segment_point_type::type +>::type +high(const Segment& segment) { + return get(segment, HIGH); +} + +struct y_s_center : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_center, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + typename segment_point_type::type +>::type +center(const Segment& segment) { + return construct::type>( + (x(high(segment)) + x(low(segment)))/2, + (y(high(segment)) + y(low(segment)))/2); +} + +struct y_s_low2 : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_low2, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + void +>::type +low(Segment& segment, const Point& point) { + set(segment, LOW, point); +} + +struct y_s_high2 : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_high2, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + void +>::type +high(Segment& segment, const Point& point) { + set(segment, HIGH, point); +} + +struct y_s_orientation1 : gtl_yes {}; + +// -1 for CW, 0 for collinear and 1 for CCW. +template +typename enable_if< + typename gtl_and_3< + y_s_orientation1, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + int +>::type +orientation(const Segment1& segment1, const Segment2& segment2) { + typedef typename coordinate_traits< + typename segment_traits::coordinate_type + >::manhattan_area_type int_x2; + typedef typename coordinate_traits< + typename segment_traits::coordinate_type + >::unsigned_area_type uint_x2; + int_x2 a1 = (int_x2)x(high(segment1)) - (int_x2)x(low(segment1)); + int_x2 b1 = (int_x2)y(high(segment1)) - (int_x2)y(low(segment1)); + int_x2 a2 = (int_x2)x(high(segment2)) - (int_x2)x(low(segment2)); + int_x2 b2 = (int_x2)y(high(segment2)) - (int_x2)y(low(segment2)); + + int sign1 = 0; + int sign2 = 0; + if (a1 && b2) + sign1 = ((a1 > 0) ^ (b2 > 0)) ? -1 : 1; + if (a2 && b1) + sign2 = ((a2 > 0) ^ (b1 > 0)) ? -1 : 1; + + if (sign1 != sign2) + return (sign1 < sign2) ? -1 : 1; + uint_x2 a3 = (uint_x2)(a1 < 0 ? -a1 : a1) * (uint_x2)(b2 < 0 ? -b2 : b2); + uint_x2 b3 = (uint_x2)(b1 < 0 ? -b1 : b1) * (uint_x2)(a2 < 0 ? -a2 : a2); + if (a3 == b3) + return 0; + return ((a3 < b3) ^ (sign1 == 1)) ? 1 : -1; +} + +struct y_s_orientation2 : gtl_yes {}; + +// -1 for right, 0 for collinear and 1 for left. +template +typename enable_if< + typename gtl_and_3< + y_s_orientation2, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + int +>::type +orientation(const Segment& segment, const Point& point) { + Segment segment2 = construct(high(segment), point); + return orientation(segment, segment2); +} + +struct y_s_contains : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_contains, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + bool +>::type +contains(const Segment& segment, + const Point& point, + bool consider_touch = true ) { + if (orientation(segment, point)) + return false; + rectangle_data::type> rect; + set_points(rect, low(segment), high(segment)); + if (!contains(rect, point, true)) + return false; + if (!consider_touch && + (equivalence(low(segment), point) || + equivalence(high(segment), point))) + return false; + return true; +} + +struct y_s_contains2 : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_contains2, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + bool +>::type +contains(const Segment1& segment1, + const Segment2& segment2, + bool consider_touch = true) { + return contains(segment1, get(segment2, LOW), consider_touch) && + contains(segment1, get(segment2, HIGH), consider_touch); +} + +struct y_s_length : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_length, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + typename segment_distance_type::type +>::type +length(const Segment& segment) { + return euclidean_distance(low(segment), high(segment)); +} + +struct y_s_scale_up : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_scale_up, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type & +scale_up(Segment& segment, + typename coordinate_traits< + typename segment_coordinate_type::type + >::unsigned_area_type factor) { + typename segment_point_type::type l = low(segment); + typename segment_point_type::type h = high(segment); + low(segment, scale_up(l, factor)); + high(segment, scale_up(h, factor)); + return segment; +} + +struct y_s_scale_down : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_scale_down, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type & +scale_down(Segment& segment, + typename coordinate_traits< + typename segment_coordinate_type::type + >::unsigned_area_type factor) { + typename segment_point_type::type l = low(segment); + typename segment_point_type::type h = high(segment); + low(segment, scale_down(l, factor)); + high(segment, scale_down(h, factor)); + return segment; +} + +struct y_s_scale : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_scale, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type & +scale(Segment& segment, const Scale& sc) { + typename segment_point_type::type l = low(segment); + typename segment_point_type::type h = high(segment); + low(segment, scale(l, sc)); + high(segment, scale(h, sc)); + return segment; +} + +struct y_s_transform : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_transform, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type & +transform(Segment& segment, const Transform& tr) { + typename segment_point_type::type l = low(segment); + typename segment_point_type::type h = high(segment); + low(segment, transform(l, tr)); + high(segment, transform(h, tr)); + return segment; +} + +struct y_s_move : gtl_yes {}; + +template +typename enable_if< + typename gtl_and< + y_s_move, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type & +move(Segment& segment, orientation_2d orient, + typename segment_coordinate_type::type displacement) { + typename segment_point_type::type l = low(segment); + typename segment_point_type::type h = high(segment); + low(segment, move(l, orient, displacement)); + high(segment, move(h, orient, displacement)); + return segment; +} + +struct y_s_convolve : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_convolve, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type & +convolve(Segment& segment, const Point& point) { + typename segment_point_type::type l = low(segment); + typename segment_point_type::type h = high(segment); + low(segment, convolve(l, point)); + high(segment, convolve(h, point)); + return segment; +} + +struct y_s_deconvolve : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_deconvolve, + typename is_mutable_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + Segment +>::type & +deconvolve(Segment& segment, const Point& point) { + typename segment_point_type::type l = low(segment); + typename segment_point_type::type h = high(segment); + low(segment, deconvolve(l, point)); + high(segment, deconvolve(h, point)); + return segment; +} + +struct y_s_abuts1 : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_abuts1, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + bool +>::type +abuts(const Segment1& segment1, const Segment2& segment2, direction_1d dir) { + return dir.to_int() ? equivalence(low(segment2) , high(segment1)) : + equivalence(low(segment1) , high(segment2)); +} + +struct y_s_abuts2 : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_abuts2, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + bool +>::type +abuts(const Segment1& segment1, const Segment2& segment2) { + return abuts(segment1, segment2, HIGH) || abuts(segment1, segment2, LOW); +} + +struct y_s_e_intersects : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_e_intersects, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + bool +>::type +intersects(const Segment1& segment1, const Segment2& segment2, + bool consider_touch = true) { + rectangle_data::type> rect1, rect2; + set_points(rect1, low(segment1), high(segment1)); + set_points(rect2, low(segment2), high(segment2)); + // Check if axis-parallel rectangles containing segments intersect. + if (!intersects(rect1, rect2, true)) + return false; + int or1_1 = orientation(segment1, low(segment2)); + int or1_2 = orientation(segment1, high(segment2)); + if (or1_1 * or1_2 > 0) + return false; + int or2_1 = orientation(segment2, low(segment1)); + int or2_2 = orientation(segment2, high(segment1)); + if (or2_1 * or2_2 > 0) + return false; + if (consider_touch || (or1_1 && or1_2) || (or2_1 && or2_2)) + return true; + if (or1_1 || or1_2) + return false; + return intersects(vertical(rect1), vertical(rect2), false) || + intersects(horizontal(rect1), horizontal(rect2), false); +} + +struct y_s_e_dist : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_e_dist, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + typename segment_distance_type::type +>::type +euclidean_distance(const Segment& segment, const Point& point) { + typedef typename segment_distance_type::type Unit; + Unit x1 = x(low(segment)); + Unit y1 = y(low(segment)); + Unit x2 = x(high(segment)); + Unit y2 = y(high(segment)); + Unit X = x(point); + Unit Y = y(point); + Unit A = X - x1; + Unit B = Y - y1; + Unit C = x2 - x1; + Unit D = y2 - y1; + Unit param = (A * C + B * D); + Unit length_sq = C * C + D * D; + if (param > length_sq) { + return euclidean_distance(high(segment), point); + } else if (param < 0.0) { + return euclidean_distance(low(segment), point); + } + if (length_sq == 0.0) + return 0.0; + Unit denom = std::sqrt(length_sq); + Unit result = (A * D - C * B) / denom; + return (result < 0.0) ? -result : result; +} + +struct y_s_e_dist2 : gtl_yes {}; + +template +typename enable_if< + typename gtl_and_3< + y_s_e_dist2, + typename is_segment_concept< + typename geometry_concept::type + >::type, + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + typename segment_distance_type::type +>::type +euclidean_distance(const Segment1& segment1, const Segment2& segment2) { + if (intersects(segment1, segment2)) + return 0.0; + typename segment_distance_type::type + result1 = euclidean_distance(segment1, low(segment2)), + result2 = euclidean_distance(segment1, high(segment2)), + result3 = euclidean_distance(segment2, low(segment1)), + result4 = euclidean_distance(segment2, high(segment1)); + if (result2 < result1) + result1 = result2; + if (result4 < result3) + result3 = result4; + return (result1 < result3) ? result1 : result3; +} + +template +template +segment_data& segment_data::operator=(const Segment& rvalue) { + assign(*this, rvalue); + return *this; +} + +template +struct geometry_concept > { + typedef segment_concept type; +}; +} +} +#endif diff --git a/3party/boost/boost/polygon/segment_data.hpp b/3party/boost/boost/polygon/segment_data.hpp new file mode 100644 index 0000000000..7d1fa05297 --- /dev/null +++ b/3party/boost/boost/polygon/segment_data.hpp @@ -0,0 +1,108 @@ +/* + Copyright 2008 Intel Corporation + + Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +*/ +#ifndef BOOST_POLYGON_SEGMENT_DATA_HPP +#define BOOST_POLYGON_SEGMENT_DATA_HPP + +#include "isotropy.hpp" + +namespace boost { +namespace polygon { +template +class segment_data { + public: + typedef T coordinate_type; + typedef point_data point_type; + + inline segment_data() +#ifndef BOOST_POLYGON_MSVC + :points_() +#endif + {} + + inline segment_data(const point_type& low, const point_type& high) +#ifndef BOOST_POLYGON_MSVC + :points_() +#endif + { + points_[LOW] = low; + points_[HIGH] = high; + } + + inline segment_data(const segment_data& that) +#ifndef BOOST_POLYGON_MSVC + :points_() +#endif + { + (*this) = that; + } + + inline segment_data& operator=(const segment_data& that) { + points_[0] = that.points_[0]; + points_[1] = that.points_[1]; + return *this; + } + + template + inline segment_data& operator=(const Segment& that); + + inline point_type get(direction_1d dir) const { + return points_[dir.to_int()]; + } + + inline void set(direction_1d dir, const point_type& point) { + points_[dir.to_int()] = point; + } + + inline point_type low() const { return points_[0]; } + + inline segment_data& low(const point_type& point) { + points_[0] = point; + return *this; + } + + inline point_type high() const {return points_[1]; } + + inline segment_data& high(const point_type& point) { + points_[1] = point; + return *this; + } + + inline bool operator==(const segment_data& that) const { + return low() == that.low() && high() == that.high(); + } + + inline bool operator!=(const segment_data& that) const { + return low() != that.low() || high() != that.high(); + } + + inline bool operator<(const segment_data& that) const { + if (points_[0] < that.points_[0]) + return true; + if (points_[0] > that.points_[0]) + return false; + return points_[1] < that.points_[1]; + } + + inline bool operator<=(const segment_data& that) const { + return !(that < *this); + } + + inline bool operator>(const segment_data& that) const { + return that < *this; + } + + inline bool operator>=(const segment_data& that) const { + return !((*this) < that); + } + + private: + point_type points_[2]; +}; +} +} +#endif diff --git a/3party/boost/boost/polygon/segment_traits.hpp b/3party/boost/boost/polygon/segment_traits.hpp new file mode 100644 index 0000000000..956c0d20e6 --- /dev/null +++ b/3party/boost/boost/polygon/segment_traits.hpp @@ -0,0 +1,38 @@ +/* + Copyright 2008 Intel Corporation + + Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +*/ +#ifndef BOOST_POLYGON_SEGMENT_TRAITS_HPP +#define BOOST_POLYGON_SEGMENT_TRAITS_HPP +namespace boost { +namespace polygon { + template + struct segment_traits { + typedef typename Segment::coordinate_type coordinate_type; + typedef typename Segment::point_type point_type; + + static inline point_type get(const Segment& segment, direction_1d dir) { + return segment.get(dir); + } + }; + + template + struct segment_mutable_traits { + typedef typename segment_traits::point_type point_type; + + static inline void set( + Segment& segment, direction_1d dir, const point_type& point) { + segment.set(dir, point); + } + + static inline Segment construct( + const point_type& low, const point_type& high) { + return Segment(low, high); + } + }; +} +} +#endif diff --git a/3party/boost/boost/polygon/segment_utils.hpp b/3party/boost/boost/polygon/segment_utils.hpp new file mode 100644 index 0000000000..97d8885fcf --- /dev/null +++ b/3party/boost/boost/polygon/segment_utils.hpp @@ -0,0 +1,159 @@ +/* + Copyright 2012 Lucanus Simonson + + Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +*/ + +#ifndef BOOST_POLYGON_SEGMENT_UTILS_HPP +#define BOOST_POLYGON_SEGMENT_UTILS_HPP + +#include +#include +#include + +namespace boost { +namespace polygon { + +template +typename enable_if< + typename gtl_and< + typename gtl_if< + typename is_segment_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type, + typename gtl_if< + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type + >::type, + void +>::type +intersect_segments( + std::vector >& result, + SegmentIterator first, SegmentIterator last) { + typedef typename segment_traits::coordinate_type Unit; + typedef typename scanline_base::Point Point; + typedef typename scanline_base::half_edge half_edge; + typedef int segment_id; + std::vector > half_edges; + std::vector > half_edges_out; + segment_id id_in = 0; + half_edges.reserve(std::distance(first, last)); + for (; first != last; ++first) { + Point l, h; + assign(l, low(*first)); + assign(h, high(*first)); + half_edges.push_back(std::make_pair(half_edge(l, h), id_in++)); + } + half_edges_out.reserve(half_edges.size()); + // Apparently no need to pre-sort data when calling validate_scan. + if (half_edges.size() != 0) { + line_intersection::validate_scan( + half_edges_out, half_edges.begin(), half_edges.end()); + } + + result.reserve(result.size() + half_edges_out.size()); + for (std::size_t i = 0; i < half_edges_out.size(); ++i) { + std::size_t id = (std::size_t)(half_edges_out[i].second); + Point l = half_edges_out[i].first.first; + Point h = half_edges_out[i].first.second; + result.push_back(std::make_pair(id, construct(l, h))); + } +} + +template +typename enable_if< + typename gtl_and< + typename gtl_if< + typename is_segment_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type, + typename gtl_if< + typename is_segment_concept< + typename geometry_concept< + typename SegmentContainer::value_type + >::type + >::type + >::type + >::type, + void +>::type +intersect_segments( + SegmentContainer& result, + SegmentIterator first, + SegmentIterator last) { + typedef typename SegmentContainer::value_type segment_type; + typedef typename segment_traits::coordinate_type Unit; + typedef typename scanline_base::Point Point; + typedef typename scanline_base::half_edge half_edge; + typedef int segment_id; + std::vector > half_edges; + std::vector > half_edges_out; + segment_id id_in = 0; + half_edges.reserve(std::distance(first, last)); + for (; first != last; ++first) { + Point l, h; + assign(l, low(*first)); + assign(h, high(*first)); + half_edges.push_back(std::make_pair(half_edge(l, h), id_in++)); + } + half_edges_out.reserve(half_edges.size()); + // Apparently no need to pre-sort data when calling validate_scan. + if (half_edges.size() != 0) { + line_intersection::validate_scan( + half_edges_out, half_edges.begin(), half_edges.end()); + } + + result.reserve(result.size() + half_edges_out.size()); + for (std::size_t i = 0; i < half_edges_out.size(); ++i) { + Point l = half_edges_out[i].first.first; + Point h = half_edges_out[i].first.second; + result.push_back(construct(l, h)); + } +} + +template +typename enable_if< + typename gtl_and< + typename gtl_if< + typename is_rectangle_concept< + typename geometry_concept::type + >::type + >::type, + typename gtl_if< + typename is_segment_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type + >::type, + bool +>::type +envelope_segments( + Rectangle& rect, + SegmentIterator first, + SegmentIterator last) { + for (SegmentIterator it = first; it != last; ++it) { + if (it == first) { + set_points(rect, low(*it), high(*it)); + } else { + encompass(rect, low(*it)); + encompass(rect, high(*it)); + } + } + return first != last; +} +} // polygon +} // boost + +#endif // BOOST_POLYGON_SEGMENT_UTILS_HPP diff --git a/3party/boost/boost/polygon/transform.hpp b/3party/boost/boost/polygon/transform.hpp index 16b566d36a..ed75ddd738 100644 --- a/3party/boost/boost/polygon/transform.hpp +++ b/3party/boost/boost/polygon/transform.hpp @@ -1,6 +1,6 @@ /* Copyright 2008 Intel Corporation - + Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -22,7 +22,7 @@ namespace boost { namespace polygon{ // positive proximal direction to. // The zero position bit (LSB) indicates whether the horizontal axis flips // when transformed. -// The 1st postion bit indicates whether the vertical axis flips when +// The 1st postion bit indicates whether the vertical axis flips when // transformed. // The 2nd position bit indicates whether the horizontal and vertical axis // swap positions when transformed. @@ -39,110 +39,110 @@ namespace boost { namespace polygon{ // meaning of the 2nd position bit to mean that the horizontal and vertical are // swapped in their new positions. // Enum Values: -// 000000 EAST NORTH UP -// 000001 WEST NORTH UP -// 000010 EAST SOUTH UP -// 000011 WEST SOUTH UP -// 000100 NORTH EAST UP -// 000101 SOUTH EAST UP -// 000110 NORTH WEST UP -// 000111 SOUTH WEST UP -// 001000 EAST NORTH DOWN -// 001001 WEST NORTH DOWN -// 001010 EAST SOUTH DOWN -// 001011 WEST SOUTH DOWN -// 001100 NORTH EAST DOWN -// 001101 SOUTH EAST DOWN -// 001110 NORTH WEST DOWN -// 001111 SOUTH WEST DOWN -// 010000 UP NORTH EAST -// 010001 DOWN NORTH EAST -// 010010 UP SOUTH EAST -// 010011 DOWN SOUTH EAST -// 010100 NORTH UP EAST -// 010101 SOUTH UP EAST -// 010110 NORTH DOWN EAST -// 010111 SOUTH DOWN EAST -// 011000 UP NORTH WEST -// 011001 DOWN NORTH WEST -// 011010 UP SOUTH WEST -// 011011 DOWN SOUTH WEST -// 011100 NORTH UP WEST -// 011101 SOUTH UP WEST -// 011110 NORTH DOWN WEST -// 011111 SOUTH DOWN WEST -// 100000 EAST UP NORTH -// 100001 WEST UP NORTH -// 100010 EAST DOWN NORTH -// 100011 WEST DOWN NORTH -// 100100 UP EAST NORTH -// 100101 DOWN EAST NORTH -// 100110 UP WEST NORTH -// 100111 DOWN WEST NORTH -// 101000 EAST UP SOUTH -// 101001 WEST UP SOUTH -// 101010 EAST DOWN SOUTH -// 101011 WEST DOWN SOUTH -// 101100 UP EAST SOUTH -// 101101 DOWN EAST SOUTH -// 101110 UP WEST SOUTH -// 101111 DOWN WEST SOUTH +// 000000 EAST NORTH UP +// 000001 WEST NORTH UP +// 000010 EAST SOUTH UP +// 000011 WEST SOUTH UP +// 000100 NORTH EAST UP +// 000101 SOUTH EAST UP +// 000110 NORTH WEST UP +// 000111 SOUTH WEST UP +// 001000 EAST NORTH DOWN +// 001001 WEST NORTH DOWN +// 001010 EAST SOUTH DOWN +// 001011 WEST SOUTH DOWN +// 001100 NORTH EAST DOWN +// 001101 SOUTH EAST DOWN +// 001110 NORTH WEST DOWN +// 001111 SOUTH WEST DOWN +// 010000 UP NORTH EAST +// 010001 DOWN NORTH EAST +// 010010 UP SOUTH EAST +// 010011 DOWN SOUTH EAST +// 010100 NORTH UP EAST +// 010101 SOUTH UP EAST +// 010110 NORTH DOWN EAST +// 010111 SOUTH DOWN EAST +// 011000 UP NORTH WEST +// 011001 DOWN NORTH WEST +// 011010 UP SOUTH WEST +// 011011 DOWN SOUTH WEST +// 011100 NORTH UP WEST +// 011101 SOUTH UP WEST +// 011110 NORTH DOWN WEST +// 011111 SOUTH DOWN WEST +// 100000 EAST UP NORTH +// 100001 WEST UP NORTH +// 100010 EAST DOWN NORTH +// 100011 WEST DOWN NORTH +// 100100 UP EAST NORTH +// 100101 DOWN EAST NORTH +// 100110 UP WEST NORTH +// 100111 DOWN WEST NORTH +// 101000 EAST UP SOUTH +// 101001 WEST UP SOUTH +// 101010 EAST DOWN SOUTH +// 101011 WEST DOWN SOUTH +// 101100 UP EAST SOUTH +// 101101 DOWN EAST SOUTH +// 101110 UP WEST SOUTH +// 101111 DOWN WEST SOUTH class axis_transformation { public: // Enum Names and values // NULL_TRANSFORM = 0, BEGIN_TRANSFORM = 0, - // ENU = 0, EAST_NORTH_UP = 0, EN = 0, EAST_NORTH = 0, + // ENU = 0, EAST_NORTH_UP = 0, EN = 0, EAST_NORTH = 0, // WNU = 1, WEST_NORTH_UP = 1, WN = 1, WEST_NORTH = 1, FLIP_X = 1, // ESU = 2, EAST_SOUTH_UP = 2, ES = 2, EAST_SOUTH = 2, FLIP_Y = 2, - // WSU = 3, WEST_SOUTH_UP = 3, WS = 3, WEST_SOUTH = 3, + // WSU = 3, WEST_SOUTH_UP = 3, WS = 3, WEST_SOUTH = 3, // NEU = 4, NORTH_EAST_UP = 4, NE = 4, NORTH_EAST = 4, SWAP_XY = 4, - // SEU = 5, SOUTH_EAST_UP = 5, SE = 5, SOUTH_EAST = 5, - // NWU = 6, NORTH_WEST_UP = 6, NW = 6, NORTH_WEST = 6, - // SWU = 7, SOUTH_WEST_UP = 7, SW = 7, SOUTH_WEST = 7, + // SEU = 5, SOUTH_EAST_UP = 5, SE = 5, SOUTH_EAST = 5, + // NWU = 6, NORTH_WEST_UP = 6, NW = 6, NORTH_WEST = 6, + // SWU = 7, SOUTH_WEST_UP = 7, SW = 7, SOUTH_WEST = 7, // END_2D_TRANSFORM = 7, - // END = 8, EAST_NORTH_DOWN = 8, - // WND = 9, WEST_NORTH_DOWN = 9, - // ESD = 10, EAST_SOUTH_DOWN = 10, - // WSD = 11, WEST_SOUTH_DOWN = 11, - // NED = 12, NORTH_EAST_DOWN = 12, - // SED = 13, SOUTH_EAST_DOWN = 13, - // NWD = 14, NORTH_WEST_DOWN = 14, - // SWD = 15, SOUTH_WEST_DOWN = 15, - // UNE = 16, UP_NORTH_EAST = 16, - // DNE = 17, DOWN_NORTH_EAST = 17, - // USE = 18, UP_SOUTH_EAST = 18, - // DSE = 19, DOWN_SOUTH_EAST = 19, - // NUE = 20, NORTH_UP_EAST = 20, - // SUE = 21, SOUTH_UP_EAST = 21, - // NDE = 22, NORTH_DOWN_EAST = 22, - // SDE = 23, SOUTH_DOWN_EAST = 23, - // UNW = 24, UP_NORTH_WEST = 24, - // DNW = 25, DOWN_NORTH_WEST = 25, - // USW = 26, UP_SOUTH_WEST = 26, - // DSW = 27, DOWN_SOUTH_WEST = 27, - // NUW = 28, NORTH_UP_WEST = 28, - // SUW = 29, SOUTH_UP_WEST = 29, - // NDW = 30, NORTH_DOWN_WEST = 30, - // SDW = 31, SOUTH_DOWN_WEST = 31, - // EUN = 32, EAST_UP_NORTH = 32, - // WUN = 33, WEST_UP_NORTH = 33, - // EDN = 34, EAST_DOWN_NORTH = 34, - // WDN = 35, WEST_DOWN_NORTH = 35, - // UEN = 36, UP_EAST_NORTH = 36, - // DEN = 37, DOWN_EAST_NORTH = 37, - // UWN = 38, UP_WEST_NORTH = 38, - // DWN = 39, DOWN_WEST_NORTH = 39, - // EUS = 40, EAST_UP_SOUTH = 40, - // WUS = 41, WEST_UP_SOUTH = 41, - // EDS = 42, EAST_DOWN_SOUTH = 42, - // WDS = 43, WEST_DOWN_SOUTH = 43, - // UES = 44, UP_EAST_SOUTH = 44, - // DES = 45, DOWN_EAST_SOUTH = 45, - // UWS = 46, UP_WEST_SOUTH = 46, - // DWS = 47, DOWN_WEST_SOUTH = 47, END_TRANSFORM = 47 + // END = 8, EAST_NORTH_DOWN = 8, + // WND = 9, WEST_NORTH_DOWN = 9, + // ESD = 10, EAST_SOUTH_DOWN = 10, + // WSD = 11, WEST_SOUTH_DOWN = 11, + // NED = 12, NORTH_EAST_DOWN = 12, + // SED = 13, SOUTH_EAST_DOWN = 13, + // NWD = 14, NORTH_WEST_DOWN = 14, + // SWD = 15, SOUTH_WEST_DOWN = 15, + // UNE = 16, UP_NORTH_EAST = 16, + // DNE = 17, DOWN_NORTH_EAST = 17, + // USE = 18, UP_SOUTH_EAST = 18, + // DSE = 19, DOWN_SOUTH_EAST = 19, + // NUE = 20, NORTH_UP_EAST = 20, + // SUE = 21, SOUTH_UP_EAST = 21, + // NDE = 22, NORTH_DOWN_EAST = 22, + // SDE = 23, SOUTH_DOWN_EAST = 23, + // UNW = 24, UP_NORTH_WEST = 24, + // DNW = 25, DOWN_NORTH_WEST = 25, + // USW = 26, UP_SOUTH_WEST = 26, + // DSW = 27, DOWN_SOUTH_WEST = 27, + // NUW = 28, NORTH_UP_WEST = 28, + // SUW = 29, SOUTH_UP_WEST = 29, + // NDW = 30, NORTH_DOWN_WEST = 30, + // SDW = 31, SOUTH_DOWN_WEST = 31, + // EUN = 32, EAST_UP_NORTH = 32, + // WUN = 33, WEST_UP_NORTH = 33, + // EDN = 34, EAST_DOWN_NORTH = 34, + // WDN = 35, WEST_DOWN_NORTH = 35, + // UEN = 36, UP_EAST_NORTH = 36, + // DEN = 37, DOWN_EAST_NORTH = 37, + // UWN = 38, UP_WEST_NORTH = 38, + // DWN = 39, DOWN_WEST_NORTH = 39, + // EUS = 40, EAST_UP_SOUTH = 40, + // WUS = 41, WEST_UP_SOUTH = 41, + // EDS = 42, EAST_DOWN_SOUTH = 42, + // WDS = 43, WEST_DOWN_SOUTH = 43, + // UES = 44, UP_EAST_SOUTH = 44, + // DES = 45, DOWN_EAST_SOUTH = 45, + // UWS = 46, UP_WEST_SOUTH = 46, + // DWS = 47, DOWN_WEST_SOUTH = 47, END_TRANSFORM = 47 enum ATR { NULL_TRANSFORM = 0, BEGIN_TRANSFORM = 0, - ENU = 0, EAST_NORTH_UP = 0, EN = 0, EAST_NORTH = 0, + ENU = 0, EAST_NORTH_UP = 0, EN = 0, EAST_NORTH = 0, WNU = 1, WEST_NORTH_UP = 1, WN = 1, WEST_NORTH = 1, FLIP_X = 1, ESU = 2, EAST_SOUTH_UP = 2, ES = 2, EAST_SOUTH = 2, FLIP_Y = 2, WSU = 3, WEST_SOUTH_UP = 3, WS = 3, WEST_SOUTH = 3, FLIP_XY = 3, @@ -151,47 +151,47 @@ public: NWU = 6, NORTH_WEST_UP = 6, NW = 6, NORTH_WEST = 6, ROTATE_RIGHT = 6, SWU = 7, SOUTH_WEST_UP = 7, SW = 7, SOUTH_WEST = 7, FLIP_SWAP_XY = 7, END_2D_TRANSFORM = 7, END = 8, EAST_NORTH_DOWN = 8, FLIP_Z = 8, - WND = 9, WEST_NORTH_DOWN = 9, - ESD = 10, EAST_SOUTH_DOWN = 10, - WSD = 11, WEST_SOUTH_DOWN = 11, - NED = 12, NORTH_EAST_DOWN = 12, - SED = 13, SOUTH_EAST_DOWN = 13, - NWD = 14, NORTH_WEST_DOWN = 14, - SWD = 15, SOUTH_WEST_DOWN = 15, - UNE = 16, UP_NORTH_EAST = 16, - DNE = 17, DOWN_NORTH_EAST = 17, - USE = 18, UP_SOUTH_EAST = 18, - DSE = 19, DOWN_SOUTH_EAST = 19, - NUE = 20, NORTH_UP_EAST = 20, - SUE = 21, SOUTH_UP_EAST = 21, - NDE = 22, NORTH_DOWN_EAST = 22, - SDE = 23, SOUTH_DOWN_EAST = 23, - UNW = 24, UP_NORTH_WEST = 24, - DNW = 25, DOWN_NORTH_WEST = 25, - USW = 26, UP_SOUTH_WEST = 26, - DSW = 27, DOWN_SOUTH_WEST = 27, - NUW = 28, NORTH_UP_WEST = 28, - SUW = 29, SOUTH_UP_WEST = 29, - NDW = 30, NORTH_DOWN_WEST = 30, - SDW = 31, SOUTH_DOWN_WEST = 31, - EUN = 32, EAST_UP_NORTH = 32, - WUN = 33, WEST_UP_NORTH = 33, - EDN = 34, EAST_DOWN_NORTH = 34, - WDN = 35, WEST_DOWN_NORTH = 35, - UEN = 36, UP_EAST_NORTH = 36, - DEN = 37, DOWN_EAST_NORTH = 37, - UWN = 38, UP_WEST_NORTH = 38, - DWN = 39, DOWN_WEST_NORTH = 39, - EUS = 40, EAST_UP_SOUTH = 40, - WUS = 41, WEST_UP_SOUTH = 41, - EDS = 42, EAST_DOWN_SOUTH = 42, - WDS = 43, WEST_DOWN_SOUTH = 43, - UES = 44, UP_EAST_SOUTH = 44, - DES = 45, DOWN_EAST_SOUTH = 45, - UWS = 46, UP_WEST_SOUTH = 46, - DWS = 47, DOWN_WEST_SOUTH = 47, END_TRANSFORM = 47 + WND = 9, WEST_NORTH_DOWN = 9, + ESD = 10, EAST_SOUTH_DOWN = 10, + WSD = 11, WEST_SOUTH_DOWN = 11, + NED = 12, NORTH_EAST_DOWN = 12, + SED = 13, SOUTH_EAST_DOWN = 13, + NWD = 14, NORTH_WEST_DOWN = 14, + SWD = 15, SOUTH_WEST_DOWN = 15, + UNE = 16, UP_NORTH_EAST = 16, + DNE = 17, DOWN_NORTH_EAST = 17, + USE = 18, UP_SOUTH_EAST = 18, + DSE = 19, DOWN_SOUTH_EAST = 19, + NUE = 20, NORTH_UP_EAST = 20, + SUE = 21, SOUTH_UP_EAST = 21, + NDE = 22, NORTH_DOWN_EAST = 22, + SDE = 23, SOUTH_DOWN_EAST = 23, + UNW = 24, UP_NORTH_WEST = 24, + DNW = 25, DOWN_NORTH_WEST = 25, + USW = 26, UP_SOUTH_WEST = 26, + DSW = 27, DOWN_SOUTH_WEST = 27, + NUW = 28, NORTH_UP_WEST = 28, + SUW = 29, SOUTH_UP_WEST = 29, + NDW = 30, NORTH_DOWN_WEST = 30, + SDW = 31, SOUTH_DOWN_WEST = 31, + EUN = 32, EAST_UP_NORTH = 32, + WUN = 33, WEST_UP_NORTH = 33, + EDN = 34, EAST_DOWN_NORTH = 34, + WDN = 35, WEST_DOWN_NORTH = 35, + UEN = 36, UP_EAST_NORTH = 36, + DEN = 37, DOWN_EAST_NORTH = 37, + UWN = 38, UP_WEST_NORTH = 38, + DWN = 39, DOWN_WEST_NORTH = 39, + EUS = 40, EAST_UP_SOUTH = 40, + WUS = 41, WEST_UP_SOUTH = 41, + EDS = 42, EAST_DOWN_SOUTH = 42, + WDS = 43, WEST_DOWN_SOUTH = 43, + UES = 44, UP_EAST_SOUTH = 44, + DES = 45, DOWN_EAST_SOUTH = 45, + UWS = 46, UP_WEST_SOUTH = 46, + DWS = 47, DOWN_WEST_SOUTH = 47, END_TRANSFORM = 47 }; - + // Individual axis enum values indicate which axis an implicit individual // axis will be mapped to. // The value of the enum paired with an axis provides the information @@ -224,10 +224,10 @@ public: explicit axis_transformation(const orientation_2d& orient); explicit axis_transformation(const direction_2d& dir); - // assignment operator + // assignment operator axis_transformation& operator=(const axis_transformation& a); - // assignment operator + // assignment operator axis_transformation& operator=(const ATR& atr); // equivalence operator @@ -239,7 +239,7 @@ public: // ordering bool operator<(const axis_transformation& a) const; - // concatenation operator + // concatenation operator axis_transformation operator+(const axis_transformation& a) const; // concatenate this with that @@ -255,7 +255,7 @@ public: direction_2d& vertical_dir) const { bool bit2 = (atr_ & 4) != 0; bool bit1 = (atr_ & 2) != 0; - bool bit0 = (atr_ & 1) != 0; + bool bit0 = (atr_ & 1) != 0; vertical_dir = direction_2d((direction_2d_enum)(((int)(!bit2) << 1) + !bit1)); horizontal_dir = direction_2d((direction_2d_enum)(((int)(bit2) << 1) + !bit0)); } @@ -270,19 +270,19 @@ public: bool bit3 = (atr_ & 8) != 0; bool bit2 = (atr_ & 4) != 0; bool bit1 = (atr_ & 2) != 0; - bool bit0 = (atr_ & 1) != 0; + bool bit0 = (atr_ & 1) != 0; proximal_dir = direction_3d((direction_2d_enum)((((int)(!bit4 & !bit5)) << 2) + - ((int)(bit5) << 1) + + ((int)(bit5) << 1) + !bit3)); vertical_dir = direction_3d((direction_2d_enum)((((int)((bit4 & bit2) | (bit5 & !bit2))) << 2)+ - ((int)(!bit5 & !bit2) << 1) + + ((int)(!bit5 & !bit2) << 1) + !bit1)); - horizontal_dir = direction_3d((direction_2d_enum)((((int)((bit5 & bit2) | + horizontal_dir = direction_3d((direction_2d_enum)((((int)((bit5 & bit2) | (bit4 & !bit2))) << 2) + - ((int)(bit2 & !bit5) << 1) + + ((int)(bit2 & !bit5) << 1) + !bit0)); } - + // combine_axis_arrays concatenates this_array and that_array overwriting // the result into this_array static void combine_axis_arrays (INDIVIDUAL_AXIS this_array[], @@ -293,7 +293,7 @@ public: void write_back_axis_array(const INDIVIDUAL_AXIS this_array[]); // behavior is deterministic but undefined in the case where illegal - // combinations of directions are passed in. + // combinations of directions are passed in. axis_transformation& set_directions(const direction_2d& horizontal_dir, const direction_2d& vertical_dir); // behavior is deterministic but undefined in the case where illegal @@ -341,31 +341,31 @@ class anisotropic_scale_factor { public: inline anisotropic_scale_factor() #ifndef BOOST_POLYGON_MSVC - : scale_() + : scale_() #endif { scale_[0] = 1; scale_[1] = 1; scale_[2] = 1; - } + } inline anisotropic_scale_factor(scale_factor_type xscale, scale_factor_type yscale) #ifndef BOOST_POLYGON_MSVC - : scale_() -#endif + : scale_() +#endif { scale_[0] = xscale; scale_[1] = yscale; scale_[2] = 1; - } - inline anisotropic_scale_factor(scale_factor_type xscale, scale_factor_type yscale, scale_factor_type zscale) + } + inline anisotropic_scale_factor(scale_factor_type xscale, scale_factor_type yscale, scale_factor_type zscale) #ifndef BOOST_POLYGON_MSVC - : scale_() -#endif + : scale_() +#endif { scale_[0] = xscale; scale_[1] = yscale; scale_[2] = zscale; - } + } // get a component of the anisotropic_scale_factor by orientation scale_factor_type get(orientation_3d orient) const; @@ -400,7 +400,7 @@ public: void scale(coordinate_type& x, coordinate_type& y, coordinate_type& z) const; // invert this scale factor to give the reverse scale factor - anisotropic_scale_factor& invert(); + anisotropic_scale_factor& invert(); private: scale_factor_type scale_[3]; @@ -428,16 +428,16 @@ public: transformation(axis_transformation atr, const point_type& referencePt, const point_type& destinationPt); transformation(const transformation& tr); - // equivalence operator + // equivalence operator bool operator==(const transformation& tr) const; - // inequivalence operator + // inequivalence operator bool operator!=(const transformation& tr) const; // ordering bool operator<(const transformation& tr) const; - // concatenation operator + // concatenation operator transformation operator+(const transformation& tr) const; // concatenate this with that @@ -465,7 +465,7 @@ public: // invert this transformation transformation& invert(); - + // get the inverse of this transformation transformation inverse() const; @@ -498,4 +498,3 @@ private: } #include "detail/transform_detail.hpp" #endif - diff --git a/3party/boost/boost/polygon/voronoi.hpp b/3party/boost/boost/polygon/voronoi.hpp new file mode 100644 index 0000000000..fb7de4976e --- /dev/null +++ b/3party/boost/boost/polygon/voronoi.hpp @@ -0,0 +1,155 @@ +// Boost.Polygon library voronoi.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_VORONOI +#define BOOST_POLYGON_VORONOI + +#include "isotropy.hpp" +#include "point_concept.hpp" +#include "segment_concept.hpp" + +#include "voronoi_builder.hpp" +#include "voronoi_diagram.hpp" + +// Public methods to compute Voronoi diagram. +// Coordinates of the points and of the endpoints of the segments should belong +// to the 32-bit signed integer range [-2^31, 2^31-1]. To use wider input +// coordinate range voronoi_builder configuration via coordinate type traits is +// is required. +// Complexity - O(N*logN), memory usage - O(N), N - number of input objects. +namespace boost { +namespace polygon { + +template +typename enable_if< + typename gtl_if< + typename is_point_concept< + typename geometry_concept::type + >::type + >::type, + std::size_t +>::type +insert(const Point& point, VB* vb) { + return vb->insert_point(x(point), y(point)); +} + +template +typename enable_if< + typename gtl_if< + typename is_point_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type, + void +>::type +insert(PointIterator first, const PointIterator last, VB* vb) { + for (PointIterator it = first; it != last; ++it) { + insert(*it, vb); + } +} + +template +typename enable_if< + typename gtl_if< + typename is_segment_concept< + typename geometry_concept::type + >::type + >::type, + std::size_t +>::type +insert(const Segment& segment, VB* vb) { + return vb->insert_segment( + x(low(segment)), y(low(segment)), + x(high(segment)), y(high(segment))); +} + +template +typename enable_if< + typename gtl_if< + typename is_segment_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type, + void +>::type +insert(SegmentIterator first, SegmentIterator last, VB* vb) { + for (SegmentIterator it = first; it != last; ++it) { + insert(*it, vb); + } +} + +template +typename enable_if< + typename gtl_if< + typename is_point_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type, + void +>::type +construct_voronoi(PointIterator first, PointIterator last, VD* vd) { + default_voronoi_builder builder; + insert(first, last, &builder); + builder.construct(vd); +} + +template +typename enable_if< + typename gtl_if< + typename is_segment_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type, + void +>::type +construct_voronoi(SegmentIterator first, SegmentIterator last, VD* vd) { + default_voronoi_builder builder; + insert(first, last, &builder); + builder.construct(vd); +} + +template +typename enable_if< + typename gtl_and< + typename gtl_if< + typename is_point_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type, + typename gtl_if< + typename is_segment_concept< + typename geometry_concept< + typename std::iterator_traits::value_type + >::type + >::type + >::type + >::type, + void +>::type +construct_voronoi(PointIterator p_first, PointIterator p_last, + SegmentIterator s_first, SegmentIterator s_last, VD* vd) { + default_voronoi_builder builder; + insert(p_first, p_last, &builder); + insert(s_first, s_last, &builder); + builder.construct(vd); +} +} // polygon +} // boost + +#endif // BOOST_POLYGON_VORONOI diff --git a/3party/boost/boost/polygon/voronoi_builder.hpp b/3party/boost/boost/polygon/voronoi_builder.hpp new file mode 100644 index 0000000000..918b86af52 --- /dev/null +++ b/3party/boost/boost/polygon/voronoi_builder.hpp @@ -0,0 +1,517 @@ +// Boost.Polygon library voronoi_builder.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_VORONOI_BUILDER +#define BOOST_POLYGON_VORONOI_BUILDER + +#include +#include +#include +#include +#include + +#include "detail/voronoi_ctypes.hpp" +#include "detail/voronoi_predicates.hpp" +#include "detail/voronoi_structures.hpp" + +#include "voronoi_geometry_type.hpp" + +namespace boost { +namespace polygon { +// GENERAL INFO: +// The sweepline algorithm implementation to compute Voronoi diagram of +// points and non-intersecting segments (except endpoints). +// Complexity - O(N*logN), memory usage - O(N), where N is the total number +// of input geometries. Input geometries should have integer coordinate type. +// +// IMPLEMENTATION DETAILS: +// Each input point creates one site event. Each input segment creates three +// site events: two for its endpoints and one for the segment itself (this is +// made to simplify output construction). All the site events are constructed +// and sorted at the algorithm initialization step. Priority queue is used to +// dynamically hold circle events. At each step of the algorithm execution the +// leftmost event is retrieved by comparing the current site event and the +// topmost element from the circle event queue. STL map (red-black tree) +// container was chosen to hold state of the beach line. The keys of the map +// correspond to the neighboring sites that form a bisector and values map to +// the corresponding Voronoi edges in the output data structure. +template , + typename VP = detail::voronoi_predicates > +class voronoi_builder { + public: + typedef typename CTT::int_type int_type; + typedef typename CTT::fpt_type fpt_type; + + voronoi_builder() : index_(0) {} + + // Each point creates a single site event. + std::size_t insert_point(const int_type& x, const int_type& y) { + site_events_.push_back(site_event_type(x, y)); + site_events_.back().initial_index(index_); + site_events_.back().source_category(SOURCE_CATEGORY_SINGLE_POINT); + return index_++; + } + + // Each segment creates three site events that correspond to: + // 1) the start point of the segment; + // 2) the end point of the segment; + // 3) the segment itself defined by its start point. + std::size_t insert_segment( + const int_type& x1, const int_type& y1, + const int_type& x2, const int_type& y2) { + // Set up start point site. + point_type p1(x1, y1); + site_events_.push_back(site_event_type(p1)); + site_events_.back().initial_index(index_); + site_events_.back().source_category(SOURCE_CATEGORY_SEGMENT_START_POINT); + + // Set up end point site. + point_type p2(x2, y2); + site_events_.push_back(site_event_type(p2)); + site_events_.back().initial_index(index_); + site_events_.back().source_category(SOURCE_CATEGORY_SEGMENT_END_POINT); + + // Set up segment site. + if (point_comparison_(p1, p2)) { + site_events_.push_back(site_event_type(p1, p2)); + site_events_.back().source_category(SOURCE_CATEGORY_INITIAL_SEGMENT); + } else { + site_events_.push_back(site_event_type(p2, p1)); + site_events_.back().source_category(SOURCE_CATEGORY_REVERSE_SEGMENT); + } + site_events_.back().initial_index(index_); + return index_++; + } + + // Run sweepline algorithm and fill output data structure. + template + void construct(OUTPUT* output) { + // Init structures. + output->_reserve(site_events_.size()); + init_sites_queue(); + init_beach_line(output); + + // The algorithm stops when there are no events to process. + event_comparison_predicate event_comparison; + while (!circle_events_.empty() || + !(site_event_iterator_ == site_events_.end())) { + if (circle_events_.empty()) { + process_site_event(output); + } else if (site_event_iterator_ == site_events_.end()) { + process_circle_event(output); + } else { + if (event_comparison(*site_event_iterator_, + circle_events_.top().first)) { + process_site_event(output); + } else { + process_circle_event(output); + } + } + while (!circle_events_.empty() && + !circle_events_.top().first.is_active()) { + circle_events_.pop(); + } + } + beach_line_.clear(); + + // Finish construction. + output->_build(); + } + + void clear() { + index_ = 0; + site_events_.clear(); + } + + private: + typedef detail::point_2d point_type; + typedef detail::site_event site_event_type; + typedef typename std::vector::const_iterator + site_event_iterator_type; + typedef detail::circle_event circle_event_type; + typedef typename VP::template point_comparison_predicate + point_comparison_predicate; + typedef typename VP:: + template event_comparison_predicate + event_comparison_predicate; + typedef typename VP:: + template circle_formation_predicate + circle_formation_predicate_type; + typedef void edge_type; + typedef detail::beach_line_node_key key_type; + typedef detail::beach_line_node_data + value_type; + typedef typename VP::template node_comparison_predicate + node_comparer_type; + typedef std::map< key_type, value_type, node_comparer_type > beach_line_type; + typedef typename beach_line_type::iterator beach_line_iterator; + typedef std::pair event_type; + typedef struct { + bool operator()(const event_type& lhs, const event_type& rhs) const { + return predicate(rhs.first, lhs.first); + } + event_comparison_predicate predicate; + } event_comparison_type; + typedef detail::ordered_queue + circle_event_queue_type; + typedef std::pair end_point_type; + + void init_sites_queue() { + // Sort site events. + std::sort(site_events_.begin(), site_events_.end(), + event_comparison_predicate()); + + // Remove duplicates. + site_events_.erase(std::unique( + site_events_.begin(), site_events_.end()), site_events_.end()); + + // Index sites. + for (std::size_t cur = 0; cur < site_events_.size(); ++cur) { + site_events_[cur].sorted_index(cur); + } + + // Init site iterator. + site_event_iterator_ = site_events_.begin(); + } + + template + void init_beach_line(OUTPUT* output) { + if (site_events_.empty()) + return; + if (site_events_.size() == 1) { + // Handle single site event case. + output->_process_single_site(site_events_[0]); + ++site_event_iterator_; + } else { + int skip = 0; + + while (site_event_iterator_ != site_events_.end() && + VP::is_vertical(site_event_iterator_->point0(), + site_events_.begin()->point0()) && + VP::is_vertical(*site_event_iterator_)) { + ++site_event_iterator_; + ++skip; + } + + if (skip == 1) { + // Init beach line with the first two sites. + init_beach_line_default(output); + } else { + // Init beach line with collinear vertical sites. + init_beach_line_collinear_sites(output); + } + } + } + + // Init beach line with the two first sites. + // The first site is always a point. + template + void init_beach_line_default(OUTPUT* output) { + // Get the first and the second site event. + site_event_iterator_type it_first = site_events_.begin(); + site_event_iterator_type it_second = site_events_.begin(); + ++it_second; + insert_new_arc( + *it_first, *it_first, *it_second, beach_line_.end(), output); + // The second site was already processed. Move the iterator. + ++site_event_iterator_; + } + + // Init beach line with collinear sites. + template + void init_beach_line_collinear_sites(OUTPUT* output) { + site_event_iterator_type it_first = site_events_.begin(); + site_event_iterator_type it_second = site_events_.begin(); + ++it_second; + while (it_second != site_event_iterator_) { + // Create a new beach line node. + key_type new_node(*it_first, *it_second); + + // Update the output. + edge_type* edge = output->_insert_new_edge(*it_first, *it_second).first; + + // Insert a new bisector into the beach line. + beach_line_.insert(beach_line_.end(), + std::pair(new_node, value_type(edge))); + + // Update iterators. + ++it_first; + ++it_second; + } + } + + void deactivate_circle_event(value_type* value) { + if (value->circle_event()) { + value->circle_event()->deactivate(); + value->circle_event(NULL); + } + } + + template + void process_site_event(OUTPUT* output) { + // Get next site event to process. + site_event_type site_event = *site_event_iterator_; + + // Move site iterator. + site_event_iterator_type last = site_event_iterator_ + 1; + + // If a new site is an end point of some segment, + // remove temporary nodes from the beach line data structure. + if (!site_event.is_segment()) { + while (!end_points_.empty() && + end_points_.top().first == site_event.point0()) { + beach_line_iterator b_it = end_points_.top().second; + end_points_.pop(); + beach_line_.erase(b_it); + } + } else { + while (last != site_events_.end() && + last->is_segment() && last->point0() == site_event.point0()) + ++last; + } + + // Find the node in the binary search tree with left arc + // lying above the new site point. + key_type new_key(*site_event_iterator_); + beach_line_iterator right_it = beach_line_.lower_bound(new_key); + + for (; site_event_iterator_ != last; ++site_event_iterator_) { + site_event = *site_event_iterator_; + beach_line_iterator left_it = right_it; + + // Do further processing depending on the above node position. + // For any two neighboring nodes the second site of the first node + // is the same as the first site of the second node. + if (right_it == beach_line_.end()) { + // The above arc corresponds to the second arc of the last node. + // Move the iterator to the last node. + --left_it; + + // Get the second site of the last node + const site_event_type& site_arc = left_it->first.right_site(); + + // Insert new nodes into the beach line. Update the output. + right_it = insert_new_arc( + site_arc, site_arc, site_event, right_it, output); + + // Add a candidate circle to the circle event queue. + // There could be only one new circle event formed by + // a new bisector and the one on the left. + activate_circle_event(left_it->first.left_site(), + left_it->first.right_site(), + site_event, right_it); + } else if (right_it == beach_line_.begin()) { + // The above arc corresponds to the first site of the first node. + const site_event_type& site_arc = right_it->first.left_site(); + + // Insert new nodes into the beach line. Update the output. + left_it = insert_new_arc( + site_arc, site_arc, site_event, right_it, output); + + // If the site event is a segment, update its direction. + if (site_event.is_segment()) { + site_event.inverse(); + } + + // Add a candidate circle to the circle event queue. + // There could be only one new circle event formed by + // a new bisector and the one on the right. + activate_circle_event(site_event, right_it->first.left_site(), + right_it->first.right_site(), right_it); + right_it = left_it; + } else { + // The above arc corresponds neither to the first, + // nor to the last site in the beach line. + const site_event_type& site_arc2 = right_it->first.left_site(); + const site_event_type& site3 = right_it->first.right_site(); + + // Remove the candidate circle from the event queue. + deactivate_circle_event(&right_it->second); + --left_it; + const site_event_type& site_arc1 = left_it->first.right_site(); + const site_event_type& site1 = left_it->first.left_site(); + + // Insert new nodes into the beach line. Update the output. + beach_line_iterator new_node_it = + insert_new_arc(site_arc1, site_arc2, site_event, right_it, output); + + // Add candidate circles to the circle event queue. + // There could be up to two circle events formed by + // a new bisector and the one on the left or right. + activate_circle_event(site1, site_arc1, site_event, new_node_it); + + // If the site event is a segment, update its direction. + if (site_event.is_segment()) { + site_event.inverse(); + } + activate_circle_event(site_event, site_arc2, site3, right_it); + right_it = new_node_it; + } + } + } + + // In general case circle event is made of the three consecutive sites + // that form two bisectors in the beach line data structure. + // Let circle event sites be A, B, C, two bisectors that define + // circle event are (A, B), (B, C). During circle event processing + // we remove (A, B), (B, C) and insert (A, C). As beach line comparison + // works correctly only if one of the nodes is a new one we remove + // (B, C) bisector and change (A, B) bisector to the (A, C). That's + // why we use const_cast there and take all the responsibility that + // map data structure keeps correct ordering. + template + void process_circle_event(OUTPUT* output) { + // Get the topmost circle event. + const event_type& e = circle_events_.top(); + const circle_event_type& circle_event = e.first; + beach_line_iterator it_first = e.second; + beach_line_iterator it_last = it_first; + + // Get the C site. + site_event_type site3 = it_first->first.right_site(); + + // Get the half-edge corresponding to the second bisector - (B, C). + edge_type* bisector2 = it_first->second.edge(); + + // Get the half-edge corresponding to the first bisector - (A, B). + --it_first; + edge_type* bisector1 = it_first->second.edge(); + + // Get the A site. + site_event_type site1 = it_first->first.left_site(); + + if (!site1.is_segment() && site3.is_segment() && + site3.point1(true) == site1.point0()) { + site3.inverse(); + } + + // Change the (A, B) bisector node to the (A, C) bisector node. + const_cast(it_first->first).right_site(site3); + + // Insert the new bisector into the beach line. + it_first->second.edge(output->_insert_new_edge( + site1, site3, circle_event, bisector1, bisector2).first); + + // Remove the (B, C) bisector node from the beach line. + beach_line_.erase(it_last); + it_last = it_first; + + // Pop the topmost circle event from the event queue. + circle_events_.pop(); + + // Check new triplets formed by the neighboring arcs + // to the left for potential circle events. + if (it_first != beach_line_.begin()) { + deactivate_circle_event(&it_first->second); + --it_first; + const site_event_type& site_l1 = it_first->first.left_site(); + activate_circle_event(site_l1, site1, site3, it_last); + } + + // Check the new triplet formed by the neighboring arcs + // to the right for potential circle events. + ++it_last; + if (it_last != beach_line_.end()) { + deactivate_circle_event(&it_last->second); + const site_event_type& site_r1 = it_last->first.right_site(); + activate_circle_event(site1, site3, site_r1, it_last); + } + } + + // Insert new nodes into the beach line. Update the output. + template + beach_line_iterator insert_new_arc( + const site_event_type& site_arc1, const site_event_type &site_arc2, + const site_event_type& site_event, beach_line_iterator position, + OUTPUT* output) { + // Create two new bisectors with opposite directions. + key_type new_left_node(site_arc1, site_event); + key_type new_right_node(site_event, site_arc2); + + // Set correct orientation for the first site of the second node. + if (site_event.is_segment()) { + new_right_node.left_site().inverse(); + } + + // Update the output. + std::pair edges = + output->_insert_new_edge(site_arc2, site_event); + position = beach_line_.insert(position, + typename beach_line_type::value_type( + new_right_node, value_type(edges.second))); + + if (site_event.is_segment()) { + // Update the beach line with temporary bisector, that will + // disappear after processing site event corresponding to the + // second endpoint of the segment site. + key_type new_node(site_event, site_event); + new_node.right_site().inverse(); + position = beach_line_.insert(position, + typename beach_line_type::value_type(new_node, value_type(NULL))); + + // Update the data structure that holds temporary bisectors. + end_points_.push(std::make_pair(site_event.point1(), position)); + } + + position = beach_line_.insert(position, + typename beach_line_type::value_type( + new_left_node, value_type(edges.first))); + + return position; + } + + // Add a new circle event to the event queue. + // bisector_node corresponds to the (site2, site3) bisector. + void activate_circle_event(const site_event_type& site1, + const site_event_type& site2, + const site_event_type& site3, + beach_line_iterator bisector_node) { + circle_event_type c_event; + // Check if the three input sites create a circle event. + if (circle_formation_predicate_(site1, site2, site3, c_event)) { + // Add the new circle event to the circle events queue. + // Update bisector's circle event iterator to point to the + // new circle event in the circle event queue. + event_type& e = circle_events_.push( + std::pair( + c_event, bisector_node)); + bisector_node->second.circle_event(&e.first); + } + } + + private: + point_comparison_predicate point_comparison_; + struct end_point_comparison { + bool operator() (const end_point_type& end1, + const end_point_type& end2) const { + return point_comparison(end2.first, end1.first); + } + point_comparison_predicate point_comparison; + }; + + std::vector site_events_; + site_event_iterator_type site_event_iterator_; + std::priority_queue< end_point_type, std::vector, + end_point_comparison > end_points_; + circle_event_queue_type circle_events_; + beach_line_type beach_line_; + circle_formation_predicate_type circle_formation_predicate_; + std::size_t index_; + + // Disallow copy constructor and operator= + voronoi_builder(const voronoi_builder&); + void operator=(const voronoi_builder&); +}; + +typedef voronoi_builder default_voronoi_builder; +} // polygon +} // boost + +#endif // BOOST_POLYGON_VORONOI_BUILDER diff --git a/3party/boost/boost/polygon/voronoi_diagram.hpp b/3party/boost/boost/polygon/voronoi_diagram.hpp new file mode 100644 index 0000000000..0a56173294 --- /dev/null +++ b/3party/boost/boost/polygon/voronoi_diagram.hpp @@ -0,0 +1,620 @@ +// Boost.Polygon library voronoi_diagram.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_VORONOI_DIAGRAM +#define BOOST_POLYGON_VORONOI_DIAGRAM + +#include +#include + +#include "detail/voronoi_ctypes.hpp" +#include "detail/voronoi_structures.hpp" + +#include "voronoi_geometry_type.hpp" + +namespace boost { +namespace polygon { + +// Forward declarations. +template +class voronoi_edge; + +// Represents Voronoi cell. +// Data members: +// 1) index of the source within the initial input set +// 2) pointer to the incident edge +// 3) mutable color member +// Cell may contain point or segment site inside. +template +class voronoi_cell { + public: + typedef T coordinate_type; + typedef std::size_t color_type; + typedef voronoi_edge voronoi_edge_type; + typedef std::size_t source_index_type; + typedef SourceCategory source_category_type; + + voronoi_cell(source_index_type source_index, + source_category_type source_category) : + source_index_(source_index), + incident_edge_(NULL), + color_(source_category) {} + + // Returns true if the cell contains point site, false else. + bool contains_point() const { + source_category_type source_category = this->source_category(); + return belongs(source_category, GEOMETRY_CATEGORY_POINT); + } + + // Returns true if the cell contains segment site, false else. + bool contains_segment() const { + source_category_type source_category = this->source_category(); + return belongs(source_category, GEOMETRY_CATEGORY_SEGMENT); + } + + source_index_type source_index() const { + return source_index_; + } + + source_category_type source_category() const { + return static_cast(color_ & SOURCE_CATEGORY_BITMASK); + } + + // Degenerate cells don't have any incident edges. + bool is_degenerate() const { return incident_edge_ == NULL; } + + voronoi_edge_type* incident_edge() { return incident_edge_; } + const voronoi_edge_type* incident_edge() const { return incident_edge_; } + void incident_edge(voronoi_edge_type* e) { incident_edge_ = e; } + + color_type color() const { return color_ >> BITS_SHIFT; } + void color(color_type color) const { + color_ &= BITS_MASK; + color_ |= color << BITS_SHIFT; + } + + private: + // 5 color bits are reserved. + enum Bits { + BITS_SHIFT = 0x5, + BITS_MASK = 0x1F + }; + + source_index_type source_index_; + voronoi_edge_type* incident_edge_; + mutable color_type color_; +}; + +// Represents Voronoi vertex. +// Data members: +// 1) vertex coordinates +// 2) pointer to the incident edge +// 3) mutable color member +template +class voronoi_vertex { + public: + typedef T coordinate_type; + typedef std::size_t color_type; + typedef voronoi_edge voronoi_edge_type; + + voronoi_vertex(const coordinate_type& x, const coordinate_type& y) : + x_(x), + y_(y), + incident_edge_(NULL), + color_(0) {} + + const coordinate_type& x() const { return x_; } + const coordinate_type& y() const { return y_; } + + bool is_degenerate() const { return incident_edge_ == NULL; } + + voronoi_edge_type* incident_edge() { return incident_edge_; } + const voronoi_edge_type* incident_edge() const { return incident_edge_; } + void incident_edge(voronoi_edge_type* e) { incident_edge_ = e; } + + color_type color() const { return color_ >> BITS_SHIFT; } + void color(color_type color) const { + color_ &= BITS_MASK; + color_ |= color << BITS_SHIFT; + } + + private: + // 5 color bits are reserved. + enum Bits { + BITS_SHIFT = 0x5, + BITS_MASK = 0x1F + }; + + coordinate_type x_; + coordinate_type y_; + voronoi_edge_type* incident_edge_; + mutable color_type color_; +}; + +// Half-edge data structure. Represents Voronoi edge. +// Data members: +// 1) pointer to the corresponding cell +// 2) pointer to the vertex that is the starting +// point of the half-edge +// 3) pointer to the twin edge +// 4) pointer to the CCW next edge +// 5) pointer to the CCW prev edge +// 6) mutable color member +template +class voronoi_edge { + public: + typedef T coordinate_type; + typedef voronoi_cell voronoi_cell_type; + typedef voronoi_vertex voronoi_vertex_type; + typedef voronoi_edge voronoi_edge_type; + typedef std::size_t color_type; + + voronoi_edge(bool is_linear, bool is_primary) : + cell_(NULL), + vertex_(NULL), + twin_(NULL), + next_(NULL), + prev_(NULL), + color_(0) { + if (is_linear) + color_ |= BIT_IS_LINEAR; + if (is_primary) + color_ |= BIT_IS_PRIMARY; + } + + voronoi_cell_type* cell() { return cell_; } + const voronoi_cell_type* cell() const { return cell_; } + void cell(voronoi_cell_type* c) { cell_ = c; } + + voronoi_vertex_type* vertex0() { return vertex_; } + const voronoi_vertex_type* vertex0() const { return vertex_; } + void vertex0(voronoi_vertex_type* v) { vertex_ = v; } + + voronoi_vertex_type* vertex1() { return twin_->vertex0(); } + const voronoi_vertex_type* vertex1() const { return twin_->vertex0(); } + + voronoi_edge_type* twin() { return twin_; } + const voronoi_edge_type* twin() const { return twin_; } + void twin(voronoi_edge_type* e) { twin_ = e; } + + voronoi_edge_type* next() { return next_; } + const voronoi_edge_type* next() const { return next_; } + void next(voronoi_edge_type* e) { next_ = e; } + + voronoi_edge_type* prev() { return prev_; } + const voronoi_edge_type* prev() const { return prev_; } + void prev(voronoi_edge_type* e) { prev_ = e; } + + // Returns a pointer to the rotation next edge + // over the starting point of the half-edge. + voronoi_edge_type* rot_next() { return prev_->twin(); } + const voronoi_edge_type* rot_next() const { return prev_->twin(); } + + // Returns a pointer to the rotation prev edge + // over the starting point of the half-edge. + voronoi_edge_type* rot_prev() { return twin_->next(); } + const voronoi_edge_type* rot_prev() const { return twin_->next(); } + + // Returns true if the edge is finite (segment, parabolic arc). + // Returns false if the edge is infinite (ray, line). + bool is_finite() const { return vertex0() && vertex1(); } + + // Returns true if the edge is infinite (ray, line). + // Returns false if the edge is finite (segment, parabolic arc). + bool is_infinite() const { return !vertex0() || !vertex1(); } + + // Returns true if the edge is linear (segment, ray, line). + // Returns false if the edge is curved (parabolic arc). + bool is_linear() const { + return (color_ & BIT_IS_LINEAR) ? true : false; + } + + // Returns true if the edge is curved (parabolic arc). + // Returns false if the edge is linear (segment, ray, line). + bool is_curved() const { + return (color_ & BIT_IS_LINEAR) ? false : true; + } + + // Returns false if edge goes through the endpoint of the segment. + // Returns true else. + bool is_primary() const { + return (color_ & BIT_IS_PRIMARY) ? true : false; + } + + // Returns true if edge goes through the endpoint of the segment. + // Returns false else. + bool is_secondary() const { + return (color_ & BIT_IS_PRIMARY) ? false : true; + } + + color_type color() const { return color_ >> BITS_SHIFT; } + void color(color_type color) const { + color_ &= BITS_MASK; + color_ |= color << BITS_SHIFT; + } + + private: + // 5 color bits are reserved. + enum Bits { + BIT_IS_LINEAR = 0x1, // linear is opposite to curved + BIT_IS_PRIMARY = 0x2, // primary is opposite to secondary + + BITS_SHIFT = 0x5, + BITS_MASK = 0x1F + }; + + voronoi_cell_type* cell_; + voronoi_vertex_type* vertex_; + voronoi_edge_type* twin_; + voronoi_edge_type* next_; + voronoi_edge_type* prev_; + mutable color_type color_; +}; + +template +struct voronoi_diagram_traits { + typedef T coordinate_type; + typedef voronoi_cell cell_type; + typedef voronoi_vertex vertex_type; + typedef voronoi_edge edge_type; + typedef class { + public: + enum { ULPS = 128 }; + bool operator()(const vertex_type& v1, const vertex_type& v2) const { + return (ulp_cmp(v1.x(), v2.x(), ULPS) == + detail::ulp_comparison::EQUAL) && + (ulp_cmp(v1.y(), v2.y(), ULPS) == + detail::ulp_comparison::EQUAL); + } + private: + typename detail::ulp_comparison ulp_cmp; + } vertex_equality_predicate_type; +}; + +// Voronoi output data structure. +// CCW ordering is used on the faces perimeter and around the vertices. +template > +class voronoi_diagram { + public: + typedef typename TRAITS::coordinate_type coordinate_type; + typedef typename TRAITS::cell_type cell_type; + typedef typename TRAITS::vertex_type vertex_type; + typedef typename TRAITS::edge_type edge_type; + + typedef std::vector cell_container_type; + typedef typename cell_container_type::const_iterator const_cell_iterator; + + typedef std::vector vertex_container_type; + typedef typename vertex_container_type::const_iterator const_vertex_iterator; + + typedef std::vector edge_container_type; + typedef typename edge_container_type::const_iterator const_edge_iterator; + + voronoi_diagram() {} + + void clear() { + cells_.clear(); + vertices_.clear(); + edges_.clear(); + } + + const cell_container_type& cells() const { + return cells_; + } + + const vertex_container_type& vertices() const { + return vertices_; + } + + const edge_container_type& edges() const { + return edges_; + } + + std::size_t num_cells() const { + return cells_.size(); + } + + std::size_t num_edges() const { + return edges_.size(); + } + + std::size_t num_vertices() const { + return vertices_.size(); + } + + void _reserve(int num_sites) { + cells_.reserve(num_sites); + vertices_.reserve(num_sites << 1); + edges_.reserve((num_sites << 2) + (num_sites << 1)); + } + + template + void _process_single_site(const detail::site_event& site) { + cells_.push_back(cell_type(site.initial_index(), site.source_category())); + } + + // Insert a new half-edge into the output data structure. + // Takes as input left and right sites that form a new bisector. + // Returns a pair of pointers to a new half-edges. + template + std::pair _insert_new_edge( + const detail::site_event& site1, + const detail::site_event& site2) { + // Get sites' indexes. + int site_index1 = site1.sorted_index(); + int site_index2 = site2.sorted_index(); + + bool is_linear = is_linear_edge(site1, site2); + bool is_primary = is_primary_edge(site1, site2); + + // Create a new half-edge that belongs to the first site. + edges_.push_back(edge_type(is_linear, is_primary)); + edge_type& edge1 = edges_.back(); + + // Create a new half-edge that belongs to the second site. + edges_.push_back(edge_type(is_linear, is_primary)); + edge_type& edge2 = edges_.back(); + + // Add the initial cell during the first edge insertion. + if (cells_.empty()) { + cells_.push_back(cell_type( + site1.initial_index(), site1.source_category())); + } + + // The second site represents a new site during site event + // processing. Add a new cell to the cell records. + cells_.push_back(cell_type( + site2.initial_index(), site2.source_category())); + + // Set up pointers to cells. + edge1.cell(&cells_[site_index1]); + edge2.cell(&cells_[site_index2]); + + // Set up twin pointers. + edge1.twin(&edge2); + edge2.twin(&edge1); + + // Return a pointer to the new half-edge. + return std::make_pair(&edge1, &edge2); + } + + // Insert a new half-edge into the output data structure with the + // start at the point where two previously added half-edges intersect. + // Takes as input two sites that create a new bisector, circle event + // that corresponds to the intersection point of the two old half-edges, + // pointers to those half-edges. Half-edges' direction goes out of the + // new Voronoi vertex point. Returns a pair of pointers to a new half-edges. + template + std::pair _insert_new_edge( + const detail::site_event& site1, + const detail::site_event& site3, + const detail::circle_event& circle, + void* data12, void* data23) { + edge_type* edge12 = static_cast(data12); + edge_type* edge23 = static_cast(data23); + + // Add a new Voronoi vertex. + vertices_.push_back(vertex_type(circle.x(), circle.y())); + vertex_type& new_vertex = vertices_.back(); + + // Update vertex pointers of the old edges. + edge12->vertex0(&new_vertex); + edge23->vertex0(&new_vertex); + + bool is_linear = is_linear_edge(site1, site3); + bool is_primary = is_primary_edge(site1, site3); + + // Add a new half-edge. + edges_.push_back(edge_type(is_linear, is_primary)); + edge_type& new_edge1 = edges_.back(); + new_edge1.cell(&cells_[site1.sorted_index()]); + + // Add a new half-edge. + edges_.push_back(edge_type(is_linear, is_primary)); + edge_type& new_edge2 = edges_.back(); + new_edge2.cell(&cells_[site3.sorted_index()]); + + // Update twin pointers. + new_edge1.twin(&new_edge2); + new_edge2.twin(&new_edge1); + + // Update vertex pointer. + new_edge2.vertex0(&new_vertex); + + // Update Voronoi prev/next pointers. + edge12->prev(&new_edge1); + new_edge1.next(edge12); + edge12->twin()->next(edge23); + edge23->prev(edge12->twin()); + edge23->twin()->next(&new_edge2); + new_edge2.prev(edge23->twin()); + + // Return a pointer to the new half-edge. + return std::make_pair(&new_edge1, &new_edge2); + } + + void _build() { + // Remove degenerate edges. + edge_iterator last_edge = edges_.begin(); + for (edge_iterator it = edges_.begin(); it != edges_.end(); it += 2) { + const vertex_type* v1 = it->vertex0(); + const vertex_type* v2 = it->vertex1(); + if (v1 && v2 && vertex_equality_predicate_(*v1, *v2)) { + remove_edge(&(*it)); + } else { + if (it != last_edge) { + edge_type* e1 = &(*last_edge = *it); + edge_type* e2 = &(*(last_edge + 1) = *(it + 1)); + e1->twin(e2); + e2->twin(e1); + if (e1->prev()) { + e1->prev()->next(e1); + e2->next()->prev(e2); + } + if (e2->prev()) { + e1->next()->prev(e1); + e2->prev()->next(e2); + } + } + last_edge += 2; + } + } + edges_.erase(last_edge, edges_.end()); + + // Set up incident edge pointers for cells and vertices. + for (edge_iterator it = edges_.begin(); it != edges_.end(); ++it) { + it->cell()->incident_edge(&(*it)); + if (it->vertex0()) { + it->vertex0()->incident_edge(&(*it)); + } + } + + // Remove degenerate vertices. + vertex_iterator last_vertex = vertices_.begin(); + for (vertex_iterator it = vertices_.begin(); it != vertices_.end(); ++it) { + if (it->incident_edge()) { + if (it != last_vertex) { + *last_vertex = *it; + vertex_type* v = &(*last_vertex); + edge_type* e = v->incident_edge(); + do { + e->vertex0(v); + e = e->rot_next(); + } while (e != v->incident_edge()); + } + ++last_vertex; + } + } + vertices_.erase(last_vertex, vertices_.end()); + + // Set up next/prev pointers for infinite edges. + if (vertices_.empty()) { + if (!edges_.empty()) { + // Update prev/next pointers for the line edges. + edge_iterator edge_it = edges_.begin(); + edge_type* edge1 = &(*edge_it); + edge1->next(edge1); + edge1->prev(edge1); + ++edge_it; + edge1 = &(*edge_it); + ++edge_it; + + while (edge_it != edges_.end()) { + edge_type* edge2 = &(*edge_it); + ++edge_it; + + edge1->next(edge2); + edge1->prev(edge2); + edge2->next(edge1); + edge2->prev(edge1); + + edge1 = &(*edge_it); + ++edge_it; + } + + edge1->next(edge1); + edge1->prev(edge1); + } + } else { + // Update prev/next pointers for the ray edges. + for (cell_iterator cell_it = cells_.begin(); + cell_it != cells_.end(); ++cell_it) { + if (cell_it->is_degenerate()) + continue; + // Move to the previous edge while + // it is possible in the CW direction. + edge_type* left_edge = cell_it->incident_edge(); + while (left_edge->prev() != NULL) { + left_edge = left_edge->prev(); + // Terminate if this is not a boundary cell. + if (left_edge == cell_it->incident_edge()) + break; + } + + if (left_edge->prev() != NULL) + continue; + + edge_type* right_edge = cell_it->incident_edge(); + while (right_edge->next() != NULL) + right_edge = right_edge->next(); + left_edge->prev(right_edge); + right_edge->next(left_edge); + } + } + } + + private: + typedef typename cell_container_type::iterator cell_iterator; + typedef typename vertex_container_type::iterator vertex_iterator; + typedef typename edge_container_type::iterator edge_iterator; + typedef typename TRAITS::vertex_equality_predicate_type + vertex_equality_predicate_type; + + template + bool is_primary_edge(const SEvent& site1, const SEvent& site2) const { + bool flag1 = site1.is_segment(); + bool flag2 = site2.is_segment(); + if (flag1 && !flag2) { + return (site1.point0() != site2.point0()) && + (site1.point1() != site2.point0()); + } + if (!flag1 && flag2) { + return (site2.point0() != site1.point0()) && + (site2.point1() != site1.point0()); + } + return true; + } + + template + bool is_linear_edge(const SEvent& site1, const SEvent& site2) const { + if (!is_primary_edge(site1, site2)) { + return true; + } + return !(site1.is_segment() ^ site2.is_segment()); + } + + // Remove degenerate edge. + void remove_edge(edge_type* edge) { + // Update the endpoints of the incident edges to the second vertex. + vertex_type* vertex = edge->vertex0(); + edge_type* updated_edge = edge->twin()->rot_next(); + while (updated_edge != edge->twin()) { + updated_edge->vertex0(vertex); + updated_edge = updated_edge->rot_next(); + } + + edge_type* edge1 = edge; + edge_type* edge2 = edge->twin(); + + edge_type* edge1_rot_prev = edge1->rot_prev(); + edge_type* edge1_rot_next = edge1->rot_next(); + + edge_type* edge2_rot_prev = edge2->rot_prev(); + edge_type* edge2_rot_next = edge2->rot_next(); + + // Update prev/next pointers for the incident edges. + edge1_rot_next->twin()->next(edge2_rot_prev); + edge2_rot_prev->prev(edge1_rot_next->twin()); + edge1_rot_prev->prev(edge2_rot_next->twin()); + edge2_rot_next->twin()->next(edge1_rot_prev); + } + + cell_container_type cells_; + vertex_container_type vertices_; + edge_container_type edges_; + vertex_equality_predicate_type vertex_equality_predicate_; + + // Disallow copy constructor and operator= + voronoi_diagram(const voronoi_diagram&); + void operator=(const voronoi_diagram&); +}; +} // polygon +} // boost + +#endif // BOOST_POLYGON_VORONOI_DIAGRAM diff --git a/3party/boost/boost/polygon/voronoi_geometry_type.hpp b/3party/boost/boost/polygon/voronoi_geometry_type.hpp new file mode 100644 index 0000000000..0b666267ec --- /dev/null +++ b/3party/boost/boost/polygon/voronoi_geometry_type.hpp @@ -0,0 +1,46 @@ +// Boost.Polygon library voronoi_geometry_type.hpp header file + +// Copyright Andrii Sydorchuk 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) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_POLYGON_VORONOI_GEOMETRY_TYPE +#define BOOST_POLYGON_VORONOI_GEOMETRY_TYPE + +namespace boost { +namespace polygon { +// Represents topology type of the voronoi site. +enum GeometryCategory { + GEOMETRY_CATEGORY_POINT = 0x0, + GEOMETRY_CATEGORY_SEGMENT = 0x1 +}; + +// Represents category of the input source that forms Voronoi cell. +enum SourceCategory { + // Point subtypes. + SOURCE_CATEGORY_SINGLE_POINT = 0x0, + SOURCE_CATEGORY_SEGMENT_START_POINT = 0x1, + SOURCE_CATEGORY_SEGMENT_END_POINT = 0x2, + + // Segment subtypes. + SOURCE_CATEGORY_INITIAL_SEGMENT = 0x8, + SOURCE_CATEGORY_REVERSE_SEGMENT = 0x9, + + SOURCE_CATEGORY_GEOMETRY_SHIFT = 0x3, + SOURCE_CATEGORY_BITMASK = 0x1F +}; + +bool belongs( + SourceCategory source_category, + GeometryCategory geometry_category) { + return (static_cast(source_category) >> + SOURCE_CATEGORY_GEOMETRY_SHIFT) == + static_cast(geometry_category); +} +} // polygon +} // boost + +#endif // BOOST_POLYGON_VORONOI_GEOMETRY_TYPE diff --git a/3party/boost/boost/proto/args.hpp b/3party/boost/boost/proto/args.hpp index 330096f267..9b7afdb447 100644 --- a/3party/boost/boost/proto/args.hpp +++ b/3party/boost/boost/proto/args.hpp @@ -16,52 +16,19 @@ #include #include #include -#include -#include #include -#include #include #include +#include + +#include +#include +#include namespace boost { namespace proto { namespace detail { - // All classes derived from std::ios_base have these public nested types, - // and are non-copyable. This is an imperfect test, but it's the best we - // we can do. - template - yes_type check_is_iostream( - typename T::failure * - , typename T::Init * - , typename T::fmtflags * - , typename T::iostate * - , typename T::openmode * - , typename T::seekdir * - ); - - template - no_type check_is_iostream(...); - - template - struct is_iostream - { - static bool const value = sizeof(yes_type) == sizeof(check_is_iostream(0,0,0,0,0,0)); - typedef mpl::bool_ type; - }; - - /// INTERNAL ONLY - // This should be a customization point. And it serves the same purpose - // as the is_noncopyable trait in Boost.Foreach. - template - struct ref_only - : mpl::or_< - is_function - , is_abstract - , is_iostream - > - {}; - /// INTERNAL ONLY template struct expr_traits @@ -102,7 +69,7 @@ namespace boost { namespace proto template struct term_traits { - typedef typename mpl::if_c::value, T &, T>::type value_type; + typedef typename mpl::if_c::value, T &, T>::type value_type; typedef T &reference; typedef T &const_reference; }; diff --git a/3party/boost/boost/proto/context/default.hpp b/3party/boost/boost/proto/context/default.hpp index 6aeb596289..f3e586f0e8 100644 --- a/3party/boost/boost/proto/context/default.hpp +++ b/3party/boost/boost/proto/context/default.hpp @@ -364,7 +364,7 @@ namespace boost { namespace proto result_type invoke(Expr &expr, Context &context, mpl::true_, mpl::false_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (BOOST_PROTO_DEFAULT_EVAL(~, 1, expr))) ->* BOOST_PROTO_DEFAULT_EVAL(~, 0, expr) @@ -374,7 +374,7 @@ namespace boost { namespace proto result_type invoke(Expr &expr, Context &context, mpl::false_, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (BOOST_PROTO_DEFAULT_EVAL(~, 1, expr))) ->* BOOST_PROTO_DEFAULT_EVAL(~, 0, expr) diff --git a/3party/boost/boost/proto/context/detail/default_eval.hpp b/3party/boost/boost/proto/context/detail/default_eval.hpp index 4114f92943..980427604e 100644 --- a/3party/boost/boost/proto/context/detail/default_eval.hpp +++ b/3party/boost/boost/proto/context/detail/default_eval.hpp @@ -69,7 +69,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (BOOST_PROTO_DEFAULT_EVAL(~, 1, expr))) ->* BOOST_PROTO_DEFAULT_EVAL(~, 0, expr) diff --git a/3party/boost/boost/proto/context/detail/preprocessed/default_eval.hpp b/3party/boost/boost/proto/context/detail/preprocessed/default_eval.hpp index 4efde73d5d..ebc69ce062 100644 --- a/3party/boost/boost/proto/context/detail/preprocessed/default_eval.hpp +++ b/3party/boost/boost/proto/context/detail/preprocessed/default_eval.hpp @@ -32,7 +32,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) @@ -66,7 +66,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) @@ -100,7 +100,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) @@ -134,7 +134,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) @@ -168,7 +168,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) @@ -202,7 +202,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) @@ -236,7 +236,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) @@ -270,7 +270,7 @@ result_type invoke(Expr &expr, Context &context, mpl::true_) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (proto::eval(proto::child_c< 1>( expr), context))) ->* proto::eval(proto::child_c< 0>( expr), context) diff --git a/3party/boost/boost/proto/detail/any.hpp b/3party/boost/boost/proto/detail/any.hpp new file mode 100644 index 0000000000..ae47b1c57c --- /dev/null +++ b/3party/boost/boost/proto/detail/any.hpp @@ -0,0 +1,85 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file any.hpp +/// Contains definition the detail::any type +// +// 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_PROTO_DETAIL_ANY_HPP_EAN_18_07_2012 +#define BOOST_PROTO_DETAIL_ANY_HPP_EAN_18_07_2012 + +#include +#include +#include +#include + +namespace boost { namespace proto +{ + namespace detail + { + namespace anyns + { + //////////////////////////////////////////////////////////////////////////////////////////// + struct any + { + template any(T const &) {} + any operator=(any); + any operator[](any); + #define M0(Z, N, DATA) any operator()(BOOST_PP_ENUM_PARAMS_Z(Z, N, any BOOST_PP_INTERCEPT)); + BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, M0, ~) + #undef M0 + + template + operator T &() const volatile; + + any operator+(); + any operator-(); + any operator*(); + any operator&(); + any operator~(); + any operator!(); + any operator++(); + any operator--(); + any operator++(int); + any operator--(int); + + friend any operator<<(any, any); + friend any operator>>(any, any); + friend any operator*(any, any); + friend any operator/(any, any); + friend any operator%(any, any); + friend any operator+(any, any); + friend any operator-(any, any); + friend any operator<(any, any); + friend any operator>(any, any); + friend any operator<=(any, any); + friend any operator>=(any, any); + friend any operator==(any, any); + friend any operator!=(any, any); + friend any operator||(any, any); + friend any operator&&(any, any); + friend any operator&(any, any); + friend any operator|(any, any); + friend any operator^(any, any); + friend any operator,(any, any); + friend any operator->*(any, any); + + friend any operator<<=(any, any); + friend any operator>>=(any, any); + friend any operator*=(any, any); + friend any operator/=(any, any); + friend any operator%=(any, any); + friend any operator+=(any, any); + friend any operator-=(any, any); + friend any operator&=(any, any); + friend any operator|=(any, any); + friend any operator^=(any, any); + }; + } + + using anyns::any; + } +}} + +#endif diff --git a/3party/boost/boost/proto/detail/basic_expr.hpp b/3party/boost/boost/proto/detail/basic_expr.hpp index 8c679925d7..51c4d955fd 100644 --- a/3party/boost/boost/proto/detail/basic_expr.hpp +++ b/3party/boost/boost/proto/detail/basic_expr.hpp @@ -100,7 +100,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; /**< INTERNAL ONLY */ diff --git a/3party/boost/boost/proto/detail/classtypeof.hpp b/3party/boost/boost/proto/detail/class_member_traits.hpp similarity index 72% rename from 3party/boost/boost/proto/detail/classtypeof.hpp rename to 3party/boost/boost/proto/detail/class_member_traits.hpp index a3228cd4b5..98d8ebbf48 100644 --- a/3party/boost/boost/proto/detail/classtypeof.hpp +++ b/3party/boost/boost/proto/detail/class_member_traits.hpp @@ -1,16 +1,16 @@ #if !defined(BOOST_PROTO_DONT_USE_PREPROCESSED_FILES) - #include + #include #elif !defined(BOOST_PP_IS_ITERATING) #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES) - #pragma wave option(preserve: 2, line: 0, output: "preprocessed/classtypeof.hpp") + #pragma wave option(preserve: 2, line: 0, output: "preprocessed/class_member_traits.hpp") #endif /////////////////////////////////////////////////////////////////////////////// - // classtypeof.hpp - // Contains specializations of the classtypeof\<\> class template. + // class_member_traits.hpp + // Contains specializations of the class_member_traits\<\> class template. // // Copyright 2008 Eric Niebler. Distributed under the Boost // Software License, Version 1.0. (See accompanying file @@ -21,7 +21,7 @@ #endif #define BOOST_PP_ITERATION_PARAMS_1 \ - (3, (0, BOOST_PROTO_MAX_ARITY, )) + (3, (0, BOOST_PROTO_MAX_ARITY, )) #include BOOST_PP_ITERATE() #if defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES) @@ -33,15 +33,17 @@ #define N BOOST_PP_ITERATION() template - struct classtypeof + struct class_member_traits { - typedef U type; + typedef U class_type; + typedef T result_type; }; template - struct classtypeof + struct class_member_traits { - typedef U type; + typedef U class_type; + typedef T result_type; }; #undef N diff --git a/3party/boost/boost/proto/detail/decltype.hpp b/3party/boost/boost/proto/detail/decltype.hpp index 92679ab274..629ef997e3 100644 --- a/3party/boost/boost/proto/detail/decltype.hpp +++ b/3party/boost/boost/proto/detail/decltype.hpp @@ -33,14 +33,18 @@ #include #include #include +#include +#include #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma warning(push) # pragma warning(disable : 4714) // function 'xxx' marked as __forceinline not inlined #endif -#ifndef BOOST_NO_DECLTYPE -# define BOOST_PROTO_DECLTYPE_(EXPR, TYPE) typedef decltype(EXPR) TYPE; +// We're STILL using Boost.Typeof on MSVC even for msvc-11.0 because of this bug: +// https://connect.microsoft.com/VisualStudio/feedback/details/765392/decltype-of-a-pointer-to-member-operator-gets-ref-qualification-wrong +#if !defined(BOOST_NO_DECLTYPE) && !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1700)) +# define BOOST_PROTO_DECLTYPE_(EXPR, TYPE) typedef decltype((EXPR)) TYPE; #else # define BOOST_PROTO_DECLTYPE_NESTED_TYPEDEF_TPL_(NESTED, EXPR) \ BOOST_TYPEOF_NESTED_TYPEDEF_TPL(BOOST_PP_CAT(nested_and_hidden_, NESTED), EXPR) \ @@ -61,68 +65,6 @@ namespace boost { namespace proto { namespace detail { - namespace anyns - { - //////////////////////////////////////////////////////////////////////////////////////////// - struct any - { - any(...); - any operator=(any); - any operator[](any); - #define M0(Z, N, DATA) any operator()(BOOST_PP_ENUM_PARAMS_Z(Z, N, any BOOST_PP_INTERCEPT)); - BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, M0, ~) - #undef M0 - - template - operator T &() const volatile; - - any operator+(); - any operator-(); - any operator*(); - any operator&(); - any operator~(); - any operator!(); - any operator++(); - any operator--(); - any operator++(int); - any operator--(int); - - friend any operator<<(any, any); - friend any operator>>(any, any); - friend any operator*(any, any); - friend any operator/(any, any); - friend any operator%(any, any); - friend any operator+(any, any); - friend any operator-(any, any); - friend any operator<(any, any); - friend any operator>(any, any); - friend any operator<=(any, any); - friend any operator>=(any, any); - friend any operator==(any, any); - friend any operator!=(any, any); - friend any operator||(any, any); - friend any operator&&(any, any); - friend any operator&(any, any); - friend any operator|(any, any); - friend any operator^(any, any); - friend any operator,(any, any); - friend any operator->*(any, any); - - friend any operator<<=(any, any); - friend any operator>>=(any, any); - friend any operator*=(any, any); - friend any operator/=(any, any); - friend any operator%=(any, any); - friend any operator+=(any, any); - friend any operator-=(any, any); - friend any operator&=(any, any); - friend any operator|=(any, any); - friend any operator^=(any, any); - }; - } - - using anyns::any; - //////////////////////////////////////////////////////////////////////////////////////////// template struct as_mutable @@ -242,16 +184,17 @@ namespace boost { namespace proto //////////////////////////////////////////////////////////////////////////////////////////// template - struct classtypeof; + struct class_member_traits; template - struct classtypeof + struct class_member_traits { - typedef U type; + typedef U class_type; + typedef T result_type; }; // Other specializations are generated by the preprocessor - #include + #include //////////////////////////////////////////////////////////////////////////////////////////// template @@ -382,9 +325,9 @@ namespace boost { namespace proto struct mem_ptr_fun { typedef - typename classtypeof< + typename class_member_traits< typename uncvref::type - >::type + >::class_type V; BOOST_PROTO_DECLTYPE_( @@ -478,10 +421,10 @@ namespace boost { namespace proto struct memfun { typedef typename uncvref::type pmf_type; - typedef typename classtypeof::type V; - typedef typename BOOST_PROTO_RESULT_OF::type result_type; + typedef typename class_member_traits::class_type V; + typedef typename class_member_traits::result_type result_type; - memfun(T t, PMF p) + memfun(T t, pmf_type p) : obj(t) , pmf(p) {} @@ -497,7 +440,7 @@ namespace boost { namespace proto private: T obj; - PMF pmf; + pmf_type pmf; }; } // namespace detail diff --git a/3party/boost/boost/proto/detail/expr.hpp b/3party/boost/boost/proto/detail/expr.hpp index 318a02d8ec..3f3291ba05 100644 --- a/3party/boost/boost/proto/detail/expr.hpp +++ b/3party/boost/boost/proto/detail/expr.hpp @@ -131,7 +131,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; /**< INTERNAL ONLY */ diff --git a/3party/boost/boost/proto/detail/is_noncopyable.hpp b/3party/boost/boost/proto/detail/is_noncopyable.hpp new file mode 100644 index 0000000000..3e2da7836f --- /dev/null +++ b/3party/boost/boost/proto/detail/is_noncopyable.hpp @@ -0,0 +1,65 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file is_noncopyable.hpp +/// Utility for detecting when types are non-copyable +// +// Copyright 2008 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_PROTO_DETAIL_IS_NONCOPYABLE_HPP_EAN_19_07_2012 +#define BOOST_PROTO_DETAIL_IS_NONCOPYABLE_HPP_EAN_19_07_2012 + +#include +#include +#include +#include +#include +#include +#include + +namespace boost { namespace proto { namespace detail +{ + // All classes derived from std::ios_base have these public nested types, + // and are non-copyable. This is an imperfect test, but it's the best we + // we can do. + template + yes_type check_is_iostream( + typename T::failure * + , typename T::Init * + , typename T::fmtflags * + , typename T::iostate * + , typename T::openmode * + , typename T::seekdir * + ); + + template + no_type check_is_iostream(...); + + template + struct is_iostream + { + static bool const value = sizeof(yes_type) == sizeof(check_is_iostream(0,0,0,0,0,0)); + typedef mpl::bool_ type; + }; + + /// INTERNAL ONLY + // This should be a customization point. And it serves the same purpose + // as the is_noncopyable trait in Boost.Foreach. + template + struct is_noncopyable + : mpl::or_< + is_function + , is_abstract + , is_iostream + , is_base_of + > + {}; + + template + struct is_noncopyable + : mpl::true_ + {}; + +}}} + +#endif diff --git a/3party/boost/boost/proto/detail/poly_function.hpp b/3party/boost/boost/proto/detail/poly_function.hpp index 55a4dbf3c3..2bde53bda9 100644 --- a/3party/boost/boost/proto/detail/poly_function.hpp +++ b/3party/boost/boost/proto/detail/poly_function.hpp @@ -24,6 +24,7 @@ #include #include #include +#include #ifdef _MSC_VER # pragma warning(push) @@ -37,21 +38,28 @@ namespace boost { namespace proto { namespace detail template struct normalize_arg { - typedef T type; + typedef typename mpl::if_c::value, T &, T>::type type; + typedef T &reference; + }; + + template + struct normalize_arg + { + typedef typename mpl::if_c::value, T const &, T>::type type; typedef T const &reference; }; template struct normalize_arg { - typedef T type; - typedef T const &reference; + typedef typename mpl::if_c::value, T &, T>::type type; + typedef T &reference; }; template struct normalize_arg { - typedef T type; + typedef typename mpl::if_c::value, T const &, T>::type type; typedef T const &reference; }; @@ -62,6 +70,13 @@ namespace boost { namespace proto { namespace detail typedef T &reference; }; + template + struct normalize_arg const> + { + typedef T &type; + typedef T &reference; + }; + template struct normalize_arg &> { @@ -93,7 +108,7 @@ namespace boost { namespace proto { namespace detail type operator()() const { - return *this; + return this->value; } private: @@ -117,7 +132,7 @@ namespace boost { namespace proto { namespace detail type operator()() const { - return *this; + return this->value; } private: @@ -137,8 +152,8 @@ namespace boost { namespace proto { namespace detail {}; //////////////////////////////////////////////////////////////////////////////////////////////// - #define BOOST_PROTO_POLY_FUNCTION() \ - typedef void is_poly_function_base_; \ + #define BOOST_PROTO_POLY_FUNCTION() \ + typedef void is_poly_function_base_; \ /**/ //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/proto/detail/preprocessed/basic_expr.hpp b/3party/boost/boost/proto/detail/preprocessed/basic_expr.hpp index f679a86aa2..c28708fb5a 100644 --- a/3party/boost/boost/proto/detail/preprocessed/basic_expr.hpp +++ b/3party/boost/boost/proto/detail/preprocessed/basic_expr.hpp @@ -44,7 +44,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; @@ -122,7 +122,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; @@ -206,7 +206,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; @@ -277,7 +277,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; @@ -348,7 +348,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; @@ -419,7 +419,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; @@ -490,7 +490,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; @@ -561,7 +561,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; @@ -632,7 +632,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; @@ -703,7 +703,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; @@ -774,7 +774,7 @@ typedef basic_expr proto_grammar; typedef basic_default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef basic_expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; typedef Arg9 proto_child9; proto_child9 child9; diff --git a/3party/boost/boost/proto/detail/preprocessed/class_member_traits.hpp b/3party/boost/boost/proto/detail/preprocessed/class_member_traits.hpp new file mode 100644 index 0000000000..418957a9c6 --- /dev/null +++ b/3party/boost/boost/proto/detail/preprocessed/class_member_traits.hpp @@ -0,0 +1,139 @@ + /////////////////////////////////////////////////////////////////////////////// + // class_member_traits.hpp + // Contains specializations of the class_member_traits\<\> class template. + // + // Copyright 2008 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) + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; + template + struct class_member_traits + { + typedef U class_type; + typedef T result_type; + }; diff --git a/3party/boost/boost/proto/detail/preprocessed/classtypeof.hpp b/3party/boost/boost/proto/detail/preprocessed/classtypeof.hpp deleted file mode 100644 index f8fce63e33..0000000000 --- a/3party/boost/boost/proto/detail/preprocessed/classtypeof.hpp +++ /dev/null @@ -1,117 +0,0 @@ - /////////////////////////////////////////////////////////////////////////////// - // classtypeof.hpp - // Contains specializations of the classtypeof\<\> class template. - // - // Copyright 2008 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) - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; - template - struct classtypeof - { - typedef U type; - }; diff --git a/3party/boost/boost/proto/detail/preprocessed/expr.hpp b/3party/boost/boost/proto/detail/preprocessed/expr.hpp index 92714ceec8..645bb5ae6a 100644 --- a/3party/boost/boost/proto/detail/preprocessed/expr.hpp +++ b/3party/boost/boost/proto/detail/preprocessed/expr.hpp @@ -44,7 +44,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; @@ -585,7 +585,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; @@ -916,7 +916,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; @@ -1234,7 +1234,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; @@ -1552,7 +1552,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; @@ -1870,7 +1870,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; @@ -2188,7 +2188,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; @@ -2506,7 +2506,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; @@ -2824,7 +2824,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; @@ -3142,7 +3142,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; @@ -3460,7 +3460,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; typedef Arg9 proto_child9; proto_child9 child9; diff --git a/3party/boost/boost/proto/detail/preprocessed/expr_variadic.hpp b/3party/boost/boost/proto/detail/preprocessed/expr_variadic.hpp index 2d07a772e7..2ab633b309 100644 --- a/3party/boost/boost/proto/detail/preprocessed/expr_variadic.hpp +++ b/3party/boost/boost/proto/detail/preprocessed/expr_variadic.hpp @@ -44,7 +44,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; @@ -330,7 +330,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; @@ -533,7 +533,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; @@ -723,7 +723,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; @@ -913,7 +913,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; @@ -1103,7 +1103,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; @@ -1293,7 +1293,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; @@ -1483,7 +1483,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; @@ -1673,7 +1673,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; @@ -1863,7 +1863,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; @@ -2053,7 +2053,7 @@ typedef basic_expr proto_grammar; typedef default_domain proto_domain; typedef default_generator proto_generator; - typedef proto::tag::proto_expr fusion_tag; + typedef proto::tag::proto_expr fusion_tag; typedef expr proto_derived_expr; typedef void proto_is_expr_; typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; typedef Arg9 proto_child9; proto_child9 child9; diff --git a/3party/boost/boost/proto/detail/preprocessed/traits.hpp b/3party/boost/boost/proto/detail/preprocessed/traits.hpp index faf013b9e5..abbb5a79eb 100644 --- a/3party/boost/boost/proto/detail/preprocessed/traits.hpp +++ b/3party/boost/boost/proto/detail/preprocessed/traits.hpp @@ -95,7 +95,7 @@ typedef proto::basic_expr, 1> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -130,7 +130,7 @@ typedef proto::basic_expr, 1> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -237,7 +237,7 @@ typedef proto::basic_expr, 2> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -272,7 +272,7 @@ typedef proto::basic_expr, 2> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -379,7 +379,7 @@ typedef proto::basic_expr, 3> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -414,7 +414,7 @@ typedef proto::basic_expr, 3> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -521,7 +521,7 @@ typedef proto::basic_expr, 4> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -556,7 +556,7 @@ typedef proto::basic_expr, 4> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -663,7 +663,7 @@ typedef proto::basic_expr, 5> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -698,7 +698,7 @@ typedef proto::basic_expr, 5> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -805,7 +805,7 @@ typedef proto::basic_expr, 6> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -840,7 +840,7 @@ typedef proto::basic_expr, 6> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -947,7 +947,7 @@ typedef proto::basic_expr, 7> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -982,7 +982,7 @@ typedef proto::basic_expr, 7> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -1089,7 +1089,7 @@ typedef proto::basic_expr, 8> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -1124,7 +1124,7 @@ typedef proto::basic_expr, 8> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -1231,7 +1231,7 @@ typedef proto::basic_expr, 9> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -1266,7 +1266,7 @@ typedef proto::basic_expr, 9> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; @@ -1369,7 +1369,7 @@ typedef proto::basic_expr, 10> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef proto::tag::function proto_tag; @@ -1399,7 +1399,7 @@ typedef proto::basic_expr, 10> proto_grammar; template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; typedef Tag proto_tag; diff --git a/3party/boost/boost/proto/detail/static_const.hpp b/3party/boost/boost/proto/detail/static_const.hpp new file mode 100644 index 0000000000..0dfdbc6672 --- /dev/null +++ b/3party/boost/boost/proto/detail/static_const.hpp @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file static_const.hpp +/// Contains definition of static_const for declaring static constants that +// +// Copyright 2008 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_PROTO_DETAIL_STATIC_CONST_HPP_EAN_20_07_2012 +#define BOOST_PROTO_DETAIL_STATIC_CONST_HPP_EAN_20_07_2012 + +namespace boost { namespace proto +{ + namespace detail + { + template + struct static_const + { + static T const value; + }; + + template + T const static_const::value = {}; + } +}} + +#endif diff --git a/3party/boost/boost/proto/detail/traits.hpp b/3party/boost/boost/proto/detail/traits.hpp index 1b5abab88d..d4fd2bce1b 100644 --- a/3party/boost/boost/proto/detail/traits.hpp +++ b/3party/boost/boost/proto/detail/traits.hpp @@ -65,7 +65,7 @@ template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; /// INTERNAL ONLY @@ -110,7 +110,7 @@ template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; /// INTERNAL ONLY diff --git a/3party/boost/boost/proto/expr.hpp b/3party/boost/boost/proto/expr.hpp index cb8a28f6e9..e75ee16711 100644 --- a/3party/boost/boost/proto/expr.hpp +++ b/3party/boost/boost/proto/expr.hpp @@ -90,6 +90,19 @@ namespace boost { namespace proto return that; } + // Work-around for: + // https://connect.microsoft.com/VisualStudio/feedback/details/765449/codegen-stack-corruption-using-runtime-checks-when-aggregate-initializing-struct + #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1700)) + template + BOOST_FORCEINLINE + Expr make_terminal(T &t, Expr *, proto::term *) + { + Expr that; + that.child0 = t; + return that; + } + #endif + template struct same_cv { diff --git a/3party/boost/boost/proto/extends.hpp b/3party/boost/boost/proto/extends.hpp index 3a8151964c..47dca1155e 100644 --- a/3party/boost/boost/proto/extends.hpp +++ b/3party/boost/boost/proto/extends.hpp @@ -172,7 +172,7 @@ namespace boost { namespace proto typedef typename proto_base_expr::address_of_hack_type_ proto_address_of_hack_type_; \ typedef void proto_is_expr_; /**< INTERNAL ONLY */ \ static const long proto_arity_c = proto_base_expr::proto_arity_c; \ - typedef boost::proto::tag::proto_expr fusion_tag; \ + typedef boost::proto::tag::proto_expr fusion_tag; \ BOOST_PP_REPEAT(BOOST_PROTO_MAX_ARITY, BOOST_PROTO_EXTENDS_CHILD, ~) \ \ BOOST_PROTO_DISABLE_MSVC_C4714 BOOST_FORCEINLINE \ @@ -571,7 +571,7 @@ namespace boost { namespace proto typedef detail::not_a_valid_type proto_address_of_hack_type_; typedef void proto_is_expr_; /**< INTERNAL ONLY */ static const long proto_arity_c = 2; - typedef boost::proto::tag::proto_expr fusion_tag; + typedef boost::proto::tag::proto_expr fusion_tag; typedef This &proto_child0; typedef expr > const &proto_child1; typedef expr proto_base_expr; diff --git a/3party/boost/boost/proto/functional.hpp b/3party/boost/boost/proto/functional.hpp index e3c868c4f8..a8577d730b 100644 --- a/3party/boost/boost/proto/functional.hpp +++ b/3party/boost/boost/proto/functional.hpp @@ -11,5 +11,6 @@ #include #include +#include #endif diff --git a/3party/boost/boost/proto/functional/range.hpp b/3party/boost/boost/proto/functional/range.hpp new file mode 100644 index 0000000000..e83c853266 --- /dev/null +++ b/3party/boost/boost/proto/functional/range.hpp @@ -0,0 +1,19 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file range.hpp +/// Proto callables for things found in the boost range library +// +// 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_PROTO_FUNCTIONAL_RANGE_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_RANGE_HPP_EAN_27_08_2012 + +#include +#include +#include +#include +#include +#include + +#endif diff --git a/3party/boost/boost/proto/functional/range/begin.hpp b/3party/boost/boost/proto/functional/range/begin.hpp new file mode 100644 index 0000000000..c425a4164f --- /dev/null +++ b/3party/boost/boost/proto/functional/range/begin.hpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file begin.hpp +/// Proto callables for boost::begin() +// +// 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_PROTO_FUNCTIONAL_RANGE_BEGIN_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_RANGE_BEGIN_HPP_EAN_27_08_2012 + +#include +#include + +namespace boost { namespace proto { namespace functional +{ + + // A PolymorphicFunctionObject that wraps boost::begin() + struct begin + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + : boost::range_iterator + {}; + + template + struct result + : boost::range_iterator + {}; + + template + typename boost::range_iterator::type operator()(Rng &rng) const + { + return boost::begin(rng); + } + + template + typename boost::range_iterator::type operator()(Rng const &rng) const + { + return boost::begin(rng); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/proto/functional/range/empty.hpp b/3party/boost/boost/proto/functional/range/empty.hpp new file mode 100644 index 0000000000..debb82dcac --- /dev/null +++ b/3party/boost/boost/proto/functional/range/empty.hpp @@ -0,0 +1,34 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file empty.hpp +/// Proto callables for boost::empty() +// +// 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_PROTO_FUNCTIONAL_RANGE_EMPTY_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_RANGE_EMPTY_HPP_EAN_27_08_2012 + +#include +#include + +namespace boost { namespace proto { namespace functional +{ + + // A PolymorphicFunctionObject that wraps boost::empty() + struct empty + { + BOOST_PROTO_CALLABLE() + + typedef bool result_type; + + template + bool operator()(Rng const &rng) const + { + return boost::empty(rng); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/proto/functional/range/end.hpp b/3party/boost/boost/proto/functional/range/end.hpp new file mode 100644 index 0000000000..f7506fd89f --- /dev/null +++ b/3party/boost/boost/proto/functional/range/end.hpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file end.hpp +/// Proto callables for boost::end() +// +// 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_PROTO_FUNCTIONAL_RANGE_END_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_RANGE_END_HPP_EAN_27_08_2012 + +#include +#include + +namespace boost { namespace proto { namespace functional +{ + + // A PolymorphicFunctionObject that wraps boost::end() + struct end + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + : boost::range_iterator + {}; + + template + struct result + : boost::range_iterator + {}; + + template + typename boost::range_iterator::type operator()(Rng &rng) const + { + return boost::end(rng); + } + + template + typename boost::range_iterator::type operator()(Rng const &rng) const + { + return boost::end(rng); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/proto/functional/range/rbegin.hpp b/3party/boost/boost/proto/functional/range/rbegin.hpp new file mode 100644 index 0000000000..ecb7db94ea --- /dev/null +++ b/3party/boost/boost/proto/functional/range/rbegin.hpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file rbegin.hpp +/// Proto callables for boost::rbegin() +// +// 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_PROTO_FUNCTIONAL_RANGE_RBEGIN_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_RANGE_RBEGIN_HPP_EAN_27_08_2012 + +#include +#include + +namespace boost { namespace proto { namespace functional +{ + + // A PolymorphicFunctionObject that wraps boost::rbegin() + struct rbegin + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + : boost::range_reverse_iterator + {}; + + template + struct result + : boost::range_reverse_iterator + {}; + + template + typename boost::range_reverse_iterator::type operator()(Rng &rng) const + { + return boost::rbegin(rng); + } + + template + typename boost::range_reverse_iterator::type operator()(Rng const &rng) const + { + return boost::rbegin(rng); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/proto/functional/range/rend.hpp b/3party/boost/boost/proto/functional/range/rend.hpp new file mode 100644 index 0000000000..5b3778209d --- /dev/null +++ b/3party/boost/boost/proto/functional/range/rend.hpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file rend.hpp +/// Proto callables for boost::rend() +// +// 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_PROTO_FUNCTIONAL_RANGE_REND_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_RANGE_REND_HPP_EAN_27_08_2012 + +#include +#include + +namespace boost { namespace proto { namespace functional +{ + + // A PolymorphicFunctionObject that wraps boost::rend() + struct rend + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + : boost::range_reverse_iterator + {}; + + template + struct result + : boost::range_reverse_iterator + {}; + + template + typename boost::range_reverse_iterator::type operator()(Rng &rng) const + { + return boost::rend(rng); + } + + template + typename boost::range_reverse_iterator::type operator()(Rng const &rng) const + { + return boost::rend(rng); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/proto/functional/range/size.hpp b/3party/boost/boost/proto/functional/range/size.hpp new file mode 100644 index 0000000000..3fcdda1159 --- /dev/null +++ b/3party/boost/boost/proto/functional/range/size.hpp @@ -0,0 +1,45 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file size.hpp +/// Proto callables for boost::size() +// +// 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_PROTO_FUNCTIONAL_RANGE_SIZE_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_RANGE_SIZE_HPP_EAN_27_08_2012 + +#include +#include + +namespace boost { namespace proto { namespace functional +{ + + // A PolymorphicFunctionObject that wraps boost::size() + struct size + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + : boost::range_size + {}; + + template + struct result + : boost::range_size + {}; + + template + typename boost::range_size::type operator()(Rng const &rng) const + { + return boost::size(rng); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/proto/functional/std.hpp b/3party/boost/boost/proto/functional/std.hpp index 2f997ef78a..38758601c2 100644 --- a/3party/boost/boost/proto/functional/std.hpp +++ b/3party/boost/boost/proto/functional/std.hpp @@ -10,5 +10,6 @@ #define BOOST_PROTO_FUNCTIONAL_STD_HPP_EAN_11_27_2010 #include +#include #endif diff --git a/3party/boost/boost/proto/functional/std/iterator.hpp b/3party/boost/boost/proto/functional/std/iterator.hpp new file mode 100644 index 0000000000..3ee2c25011 --- /dev/null +++ b/3party/boost/boost/proto/functional/std/iterator.hpp @@ -0,0 +1,158 @@ +/////////////////////////////////////////////////////////////////////////////// +/// \file iterator.hpp +/// Proto callables for std functions found in \ +// +// 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_PROTO_FUNCTIONAL_STD_ITERATOR_HPP_EAN_27_08_2012 +#define BOOST_PROTO_FUNCTIONAL_STD_ITERATOR_HPP_EAN_27_08_2012 + +#include +#include +#include +#include + +namespace boost { namespace proto { namespace functional +{ + + // A PolymorphicFunctionObject wrapping std::advance + struct advance + { + BOOST_PROTO_CALLABLE() + + typedef void result_type; + + template + void operator()(InputIterator &x, Distance n) const + { + std::advance(x, n); + } + }; + + // A PolymorphicFunctionObject wrapping std::distance + struct distance + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + { + typedef + typename std::iterator_traits< + typename boost::remove_const< + typename boost::remove_reference::type + >::type + >::difference_type + type; + }; + + template + typename std::iterator_traits::difference_type + operator()(InputIterator first, InputIterator last) const + { + return std::distance(first, last); + } + }; + + // A PolymorphicFunctionObject wrapping std::next + struct next + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + { + typedef + typename boost::remove_const< + typename boost::remove_reference::type + >::type + type; + }; + + template + struct result + { + typedef + typename boost::remove_const< + typename boost::remove_reference::type + >::type + type; + }; + + template + ForwardIterator operator()(ForwardIterator x) const + { + return std::advance( + x + , static_cast::difference_type>(1) + ); + } + + template + ForwardIterator operator()( + ForwardIterator x + , typename std::iterator_traits::difference_type n + ) const + { + return std::advance(x, n); + } + }; + + // A PolymorphicFunctionObject wrapping std::prior + struct prior + { + BOOST_PROTO_CALLABLE() + + template + struct result; + + template + struct result + { + typedef + typename boost::remove_const< + typename boost::remove_reference::type + >::type + type; + }; + + template + struct result + { + typedef + typename boost::remove_const< + typename boost::remove_reference::type + >::type + type; + }; + + template + BidirectionalIterator operator()(BidirectionalIterator x) const + { + return std::advance( + x + , -static_cast::difference_type>(1) + ); + } + + template + BidirectionalIterator operator()( + BidirectionalIterator x + , typename std::iterator_traits::difference_type n + ) const + { + return std::advance(x, -n); + } + }; + +}}} + +#endif diff --git a/3party/boost/boost/proto/fusion.hpp b/3party/boost/boost/proto/fusion.hpp index 198a34503d..21763d3139 100644 --- a/3party/boost/boost/proto/fusion.hpp +++ b/3party/boost/boost/proto/fusion.hpp @@ -21,12 +21,14 @@ #include #include #include -#include +#include +#include #include #include #include #include #include +#include #ifdef BOOST_MSVC #pragma warning(push) @@ -46,7 +48,12 @@ namespace boost { namespace proto typedef Expr expr_type; static const long index = Pos; typedef fusion::random_access_traversal_tag category; - typedef tag::proto_expr_iterator fusion_tag; + typedef + tag::proto_expr_iterator< + typename Expr::proto_tag + , typename Expr::proto_domain + > + fusion_tag; explicit expr_iterator(Expr &e) : expr(e) @@ -55,20 +62,6 @@ namespace boost { namespace proto Expr &expr; }; - template - struct flat_view - { - typedef Expr expr_type; - typedef fusion::forward_traversal_tag category; - typedef tag::proto_flat_view fusion_tag; - - explicit flat_view(Expr &e) - : expr_(e) - {} - - Expr &expr_; - }; - template struct as_element { @@ -103,6 +96,33 @@ namespace boost { namespace proto return typename result::type(e); } }; + + template + struct flat_view + : fusion::sequence_base > + { + typedef fusion::forward_traversal_tag category; + typedef + tag::proto_flat_view< + typename Expr::proto_tag + , typename Expr::proto_domain + > + fusion_tag; + typedef + typename fusion::result_of::as_list< + typename fusion::result_of::transform< + Expr + , as_element + >::type + >::type + segments_type; + + explicit flat_view(Expr &e) + : segs_(fusion::as_list(fusion::transform(e, as_element()))) + {} + + segments_type segs_; + }; } namespace result_of @@ -250,8 +270,8 @@ namespace boost { namespace fusion template struct is_sequence_impl; - template<> - struct is_sequence_impl + template + struct is_sequence_impl > { template struct apply @@ -259,8 +279,8 @@ namespace boost { namespace fusion {}; }; - template<> - struct is_sequence_impl + template + struct is_sequence_impl > { template struct apply @@ -271,8 +291,8 @@ namespace boost { namespace fusion template struct is_view_impl; - template<> - struct is_view_impl + template + struct is_view_impl > { template struct apply @@ -280,8 +300,8 @@ namespace boost { namespace fusion {}; }; - template<> - struct is_view_impl + template + struct is_view_impl > { template struct apply @@ -292,8 +312,8 @@ namespace boost { namespace fusion template struct value_of_impl; - template<> - struct value_of_impl + template + struct value_of_impl > { template< typename Iterator @@ -323,8 +343,8 @@ namespace boost { namespace fusion template struct deref_impl; - template<> - struct deref_impl + template + struct deref_impl > { template< typename Iterator @@ -364,8 +384,8 @@ namespace boost { namespace fusion template struct advance_impl; - template<> - struct advance_impl + template + struct advance_impl > { template struct apply @@ -387,8 +407,8 @@ namespace boost { namespace fusion template struct distance_impl; - template<> - struct distance_impl + template + struct distance_impl > { template struct apply @@ -399,32 +419,32 @@ namespace boost { namespace fusion template struct next_impl; - template<> - struct next_impl + template + struct next_impl > { template struct apply - : advance_impl::template apply > + : advance_impl >::template apply > {}; }; template struct prior_impl; - template<> - struct prior_impl + template + struct prior_impl > { template struct apply - : advance_impl::template apply > + : advance_impl >::template apply > {}; }; template struct category_of_impl; - template<> - struct category_of_impl + template + struct category_of_impl > { template struct apply @@ -436,8 +456,8 @@ namespace boost { namespace fusion template struct size_impl; - template<> - struct size_impl + template + struct size_impl > { template struct apply @@ -448,8 +468,8 @@ namespace boost { namespace fusion template struct begin_impl; - template<> - struct begin_impl + template + struct begin_impl > { template struct apply @@ -466,8 +486,8 @@ namespace boost { namespace fusion template struct end_impl; - template<> - struct end_impl + template + struct end_impl > { template struct apply @@ -489,8 +509,8 @@ namespace boost { namespace fusion template struct value_at_impl; - template<> - struct value_at_impl + template + struct value_at_impl > { template< typename Sequence @@ -521,8 +541,8 @@ namespace boost { namespace fusion template struct at_impl; - template<> - struct at_impl + template + struct at_impl > { template< typename Sequence @@ -560,11 +580,56 @@ namespace boost { namespace fusion }; }; + template + struct convert_impl; + + template + struct convert_impl > + { + template + struct apply + { + typedef + typename proto::result_of::unpack_expr< + Tag + , Domain + , Sequence + >::type + type; + + static type call(Sequence& seq) + { + return proto::unpack_expr(seq); + } + }; + }; + + template + struct convert_impl > + { + template + struct apply + { + typedef + typename proto::result_of::unpack_expr< + Tag + , Domain + , Sequence + >::type + type; + + static type call(Sequence& seq) + { + return proto::unpack_expr(seq); + } + }; + }; + template struct is_segmented_impl; - template<> - struct is_segmented_impl + template + struct is_segmented_impl > { template struct apply @@ -575,30 +640,23 @@ namespace boost { namespace fusion template struct segments_impl; - template<> - struct segments_impl + template + struct segments_impl > { template struct apply { - typedef typename Sequence::expr_type::proto_tag proto_tag; - - typedef - fusion::transform_view< - typename Sequence::expr_type - , proto::detail::as_element - > - type; - + typedef typename Sequence::segments_type const &type; + static type call(Sequence &sequence) { - return type(sequence.expr_, proto::detail::as_element()); + return sequence.segs_; } }; }; - template<> - struct category_of_impl + template + struct category_of_impl > { template struct apply @@ -606,7 +664,6 @@ namespace boost { namespace fusion typedef forward_traversal_tag type; }; }; - } namespace traits diff --git a/3party/boost/boost/proto/generate.hpp b/3party/boost/boost/proto/generate.hpp index f6eab4d966..92a47c432a 100644 --- a/3party/boost/boost/proto/generate.hpp +++ b/3party/boost/boost/proto/generate.hpp @@ -116,11 +116,7 @@ namespace boost { namespace proto /// \return expr template BOOST_FORCEINLINE - #ifdef BOOST_PROTO_STRICT_RESULT_OF - Expr - #else - Expr const & - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(Expr, Expr const &) operator ()(Expr const &e) const { return e; @@ -231,6 +227,28 @@ namespace boost { namespace proto Extends that = {e}; return that; } + + // Work-around for: + // https://connect.microsoft.com/VisualStudio/feedback/details/765449/codegen-stack-corruption-using-runtime-checks-when-aggregate-initializing-struct + #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1700)) + template + BOOST_FORCEINLINE + Extends > > operator ()(expr > const &e) const + { + Extends > > that; + proto::value(that.proto_expr_) = proto::value(e); + return that; + } + + template + BOOST_FORCEINLINE + Extends > > operator ()(basic_expr > const &e) const + { + Extends > > that; + proto::value(that.proto_expr_) = proto::value(e); + return that; + } + #endif }; /// \brief A generator that replaces child nodes held by diff --git a/3party/boost/boost/proto/matches.hpp b/3party/boost/boost/proto/matches.hpp index 5136a5cc7b..38ff962527 100644 --- a/3party/boost/boost/proto/matches.hpp +++ b/3party/boost/boost/proto/matches.hpp @@ -571,11 +571,7 @@ namespace boost { namespace proto /// \param expr An expression /// \return \c e - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename impl::expr_param - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::expr_param) operator()( typename impl::expr_param e , typename impl::state_param @@ -620,11 +616,7 @@ namespace boost { namespace proto /// \param e An expression /// \pre matches\::value is \c true. /// \return \c e - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename impl::expr_param - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::expr_param) operator()( typename impl::expr_param e , typename impl::state_param diff --git a/3party/boost/boost/proto/proto_fwd.hpp b/3party/boost/boost/proto/proto_fwd.hpp index 6fb25bfcf5..5547e77d05 100644 --- a/3party/boost/boost/proto/proto_fwd.hpp +++ b/3party/boost/boost/proto/proto_fwd.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #ifndef BOOST_PROTO_MAX_ARITY # define BOOST_PROTO_MAX_ARITY 10 @@ -92,18 +93,13 @@ # endif #endif -#ifndef BOOST_NO_DECLTYPE_N3276 +#ifdef BOOST_NO_DECLTYPE_N3276 # // Proto can only use the decltype-based result_of if N3276 has been # // implemented by the compiler. # // See http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3276.pdf # ifndef BOOST_PROTO_USE_NORMAL_RESULT_OF # define BOOST_PROTO_USE_NORMAL_RESULT_OF # endif -# // If we're using the decltype-based result_of, we need to be a bit -# // stricter about the return types of some functions. -# ifndef BOOST_PROTO_STRICT_RESULT_OF -# define BOOST_PROTO_STRICT_RESULT_OF -# endif #endif // Unless compiler support is there, use tr1_result_of instead of @@ -114,6 +110,15 @@ # define BOOST_PROTO_RESULT_OF boost::tr1_result_of #endif +// If we're using the decltype-based result_of, we need to be a bit +// stricter about the return types of some functions. +#if defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_PROTO_USE_NORMAL_RESULT_OF) +# define BOOST_PROTO_STRICT_RESULT_OF +# define BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(X, Y) X +#else +# define BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(X, Y) Y +#endif + #ifdef BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING # define BOOST_PROTO_EXTENDED_TEMPLATE_PARAMETERS_MATCHING #endif @@ -217,6 +222,9 @@ namespace boost { namespace proto template struct is_aggregate_; + + template + struct flat_view; } typedef detail::ignore const ignore; @@ -291,9 +299,9 @@ namespace boost { namespace proto struct function; // Fusion tags - struct proto_expr; - struct proto_expr_iterator; - struct proto_flat_view; + template struct proto_expr; + template struct proto_expr_iterator; + template struct proto_flat_view; } } @@ -485,6 +493,14 @@ namespace boost { namespace proto template struct unpack_expr; + template + struct as_env; + + template + struct has_env_var; + + template + struct env_var; } template @@ -496,6 +512,9 @@ namespace boost { namespace proto template struct is_sub_domain_of; + template + struct is_env; + template struct arity_of; @@ -588,6 +607,14 @@ namespace boost { namespace proto template struct child_c; + struct as_env; + + template + struct has_env_var; + + template + struct env_var; + template struct make_expr; @@ -730,6 +757,29 @@ namespace boost { namespace proto BOOST_PROTO_CALLABLE() }; + namespace envns_ + { + struct key_not_found; + + struct empty_env; + + typedef int empty_state; + + template + struct env; + + struct data_type; + + struct transforms_type; + } + + using envns_::key_not_found; + using envns_::empty_env; + using envns_::empty_state; + using envns_::env; + using envns_::data_type; + using envns_::transforms_type; + struct external_transform; template @@ -770,7 +820,7 @@ namespace boost { namespace proto template struct reverse_fold_tree; - template + template struct pass_through; template @@ -821,12 +871,14 @@ namespace boost { namespace proto struct _byref; struct _byval; + template + struct _env_var; + + struct _env; + template struct is_extension; - //namespace exops - //{} - namespace exops = exprns_; }} // namespace boost::proto diff --git a/3party/boost/boost/proto/traits.hpp b/3party/boost/boost/proto/traits.hpp index 05263b14d0..cf9f091ed6 100644 --- a/3party/boost/boost/proto/traits.hpp +++ b/3party/boost/boost/proto/traits.hpp @@ -116,7 +116,7 @@ namespace boost { namespace proto : mpl::false_ {}; - #if BOOST_WORKAROUND(__GNUC__, == 3) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0) + #if BOOST_WORKAROUND(__GNUC__, == 3) || (BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0) // work around GCC bug template struct is_callable > @@ -398,11 +398,7 @@ namespace boost { namespace proto /// \return \c e /// \throw nothrow BOOST_FORCEINLINE - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename impl::expr_param - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::expr_param) operator ()( typename impl::expr_param e , typename impl::state_param @@ -432,7 +428,7 @@ namespace boost { namespace proto template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; /// INTERNAL ONLY @@ -469,11 +465,7 @@ namespace boost { namespace proto /// \return \c e /// \throw nothrow BOOST_FORCEINLINE - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename impl::expr_param - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::expr_param) operator ()( typename impl::expr_param e , typename impl::state_param @@ -507,7 +499,7 @@ namespace boost { namespace proto template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; /// INTERNAL ONLY @@ -533,7 +525,7 @@ namespace boost { namespace proto template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; /// INTERNAL ONLY @@ -554,7 +546,7 @@ namespace boost { namespace proto \ template \ struct impl \ - : detail::pass_through_impl \ + : detail::pass_through_impl \ {}; \ \ typedef proto::tag::Op proto_tag; \ @@ -572,7 +564,7 @@ namespace boost { namespace proto \ template \ struct impl \ - : detail::pass_through_impl \ + : detail::pass_through_impl \ {}; \ \ typedef proto::tag::Op proto_tag; \ diff --git a/3party/boost/boost/proto/transform.hpp b/3party/boost/boost/proto/transform.hpp index d796ba5c0d..ae376d722a 100644 --- a/3party/boost/boost/proto/transform.hpp +++ b/3party/boost/boost/proto/transform.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include diff --git a/3party/boost/boost/proto/transform/arg.hpp b/3party/boost/boost/proto/transform/arg.hpp index ac41fa38ee..9fdf80e5b4 100644 --- a/3party/boost/boost/proto/transform/arg.hpp +++ b/3party/boost/boost/proto/transform/arg.hpp @@ -9,10 +9,12 @@ #ifndef BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_11_01_2007 #define BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_11_01_2007 +#include #include #include #include #include +#include namespace boost { namespace proto { @@ -38,11 +40,7 @@ namespace boost { namespace proto /// \param e The current expression. /// \return \c e /// \throw nothrow - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename impl::expr_param - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::expr_param) operator()( typename impl::expr_param e , typename impl::state_param @@ -75,11 +73,7 @@ namespace boost { namespace proto /// \param s The current state. /// \return \c s /// \throw nothrow - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename impl::state_param - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::state_param) operator ()( typename impl::expr_param , typename impl::state_param s @@ -105,28 +99,13 @@ namespace boost { namespace proto struct _data : transform<_data> { template - struct impl : transform_impl - { - typedef Data result_type; - - /// Returns the current data. - /// \param d The current data. - /// \return \c d - /// \throw nothrow - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename impl::data_param - #endif - operator ()( - typename impl::expr_param - , typename impl::state_param - , typename impl::data_param d - ) const - { - return d; - } - }; + struct impl + : mpl::if_c< + is_env::value + , _env_var + , _env + >::type::template impl + {}; }; /// \brief A PrimitiveTransform that returns N-th child of the current diff --git a/3party/boost/boost/proto/transform/default.hpp b/3party/boost/boost/proto/transform/default.hpp index 26a4682415..cac2d6eee8 100644 --- a/3party/boost/boost/proto/transform/default.hpp +++ b/3party/boost/boost/proto/transform/default.hpp @@ -543,7 +543,7 @@ namespace boost { namespace proto ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (BOOST_PROTO_DEFAULT_EVAL(~, 1, e))) ->* BOOST_PROTO_DEFAULT_EVAL(~, 0, e) @@ -559,7 +559,7 @@ namespace boost { namespace proto ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (BOOST_PROTO_DEFAULT_EVAL(~, 1, e))) ->* BOOST_PROTO_DEFAULT_EVAL(~, 0, e) diff --git a/3party/boost/boost/proto/transform/detail/default_function_impl.hpp b/3party/boost/boost/proto/transform/detail/default_function_impl.hpp index e46d8368db..a8f421c095 100644 --- a/3party/boost/boost/proto/transform/detail/default_function_impl.hpp +++ b/3party/boost/boost/proto/transform/detail/default_function_impl.hpp @@ -84,7 +84,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (BOOST_PROTO_DEFAULT_EVAL(~, 1, e))) ->* BOOST_PROTO_DEFAULT_EVAL(~, 0, e) diff --git a/3party/boost/boost/proto/transform/detail/make_gcc_workaround.hpp b/3party/boost/boost/proto/transform/detail/make_gcc_workaround.hpp index dae573dfcc..b3b7dea1c9 100644 --- a/3party/boost/boost/proto/transform/detail/make_gcc_workaround.hpp +++ b/3party/boost/boost/proto/transform/detail/make_gcc_workaround.hpp @@ -1,6 +1,6 @@ #if !defined(BOOST_PROTO_DONT_USE_PREPROCESSED_FILES) - #if BOOST_WORKAROUND(__GNUC__, == 3) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0) + #if BOOST_WORKAROUND(__GNUC__, == 3) || (BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0) #include #endif @@ -29,7 +29,7 @@ #pragma wave option(preserve: 1) #endif - #if BOOST_WORKAROUND(__GNUC__, == 3) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0) || \ + #if BOOST_WORKAROUND(__GNUC__, == 3) || (BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0) || \ (defined(__WAVE__) && defined(BOOST_PROTO_CREATE_PREPROCESSED_FILES)) #define BOOST_PP_ITERATION_PARAMS_1 \ diff --git a/3party/boost/boost/proto/transform/detail/pass_through_impl.hpp b/3party/boost/boost/proto/transform/detail/pass_through_impl.hpp index 23e3534822..03ac568b6b 100644 --- a/3party/boost/boost/proto/transform/detail/pass_through_impl.hpp +++ b/3party/boost/boost/proto/transform/detail/pass_through_impl.hpp @@ -54,15 +54,22 @@ #define N BOOST_PP_ITERATION() - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , BOOST_PP_CAT(list, N)< BOOST_PP_ENUM(N, BOOST_PROTO_DEFINE_TRANSFORM_TYPE, ~) @@ -70,11 +77,12 @@ >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d diff --git a/3party/boost/boost/proto/transform/detail/preprocessed/default_function_impl.hpp b/3party/boost/boost/proto/transform/detail/preprocessed/default_function_impl.hpp index 9086c9a322..72ff60e80f 100644 --- a/3party/boost/boost/proto/transform/detail/preprocessed/default_function_impl.hpp +++ b/3party/boost/boost/proto/transform/detail/preprocessed/default_function_impl.hpp @@ -47,7 +47,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) @@ -95,7 +95,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) @@ -143,7 +143,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) @@ -191,7 +191,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) @@ -239,7 +239,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) @@ -287,7 +287,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) @@ -335,7 +335,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) @@ -383,7 +383,7 @@ ) const { BOOST_PROTO_USE_GET_POINTER(); - typedef typename detail::classtypeof::type class_type; + typedef typename detail::class_member_traits::class_type class_type; return ( BOOST_PROTO_GET_POINTER(class_type, (typename Grammar::template impl()( proto::child_c< 1>( e), s, d ))) ->* typename Grammar::template impl()( proto::child_c< 0>( e), s, d ) diff --git a/3party/boost/boost/proto/transform/detail/preprocessed/pass_through_impl.hpp b/3party/boost/boost/proto/transform/detail/preprocessed/pass_through_impl.hpp index 3a1620f18d..401b200cd4 100644 --- a/3party/boost/boost/proto/transform/detail/preprocessed/pass_through_impl.hpp +++ b/3party/boost/boost/proto/transform/detail/preprocessed/pass_through_impl.hpp @@ -7,24 +7,32 @@ // Copyright 2008 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) - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list1< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -40,24 +48,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list2< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -73,24 +89,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list3< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -106,24 +130,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list4< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -139,24 +171,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list5< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -172,24 +212,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list6< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -205,24 +253,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list7< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -238,24 +294,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list8< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -271,24 +335,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list9< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d @@ -304,24 +376,32 @@ return proto_generator()(that); } }; - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef typename pass_through_impl::expr unref_expr; + typedef + typename mpl::if_c< + is_same::value + , typename unref_expr::proto_domain + , Domain + >::type + result_domain; typedef typename base_expr< - typename unref_expr::proto_domain + result_domain , typename unref_expr::proto_tag , list10< typename Grammar::proto_child0::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c::type , State , Data >::result_type , typename Grammar::proto_child9::template impl< typename result_of::child_c::type , State , Data >::result_type > >::type expr_type; - typedef typename unref_expr::proto_generator proto_generator; - typedef typename BOOST_PROTO_RESULT_OF::type const result_type; + typedef typename result_domain::proto_generator proto_generator; + typedef typename BOOST_PROTO_RESULT_OF::type result_type; BOOST_FORCEINLINE - result_type const operator ()( + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const) + operator ()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param s , typename pass_through_impl::data_param d diff --git a/3party/boost/boost/proto/transform/env.hpp b/3party/boost/boost/proto/transform/env.hpp new file mode 100644 index 0000000000..81309fa360 --- /dev/null +++ b/3party/boost/boost/proto/transform/env.hpp @@ -0,0 +1,515 @@ +/////////////////////////////////////////////////////////////////////////////// +// env.hpp +// Helpers for producing and consuming tranform env variables. +// +// 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_PROTO_TRANSFORM_ENV_HPP_EAN_18_07_2012 +#define BOOST_PROTO_TRANSFORM_ENV_HPP_EAN_18_07_2012 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4180) // qualifier applied to function type has no meaning; ignored +#endif + +namespace boost +{ + namespace proto + { + namespace detail + { + template + struct value_type + { + typedef typename remove_const::type value; + typedef typename add_reference::type reference; + typedef typename mpl::if_c::value, reference, value>::type type; + }; + + template + struct value_type + { + typedef T &value; + typedef T &reference; + typedef T &type; + }; + } + + #define BOOST_PROTO_DEFINE_ENV_VAR(TAG, NAME) \ + struct TAG \ + { \ + template \ + boost::proto::env const \ + operator =(boost::reference_wrapper &value) const \ + { \ + return boost::proto::env(value.get()); \ + } \ + template \ + boost::proto::env const \ + operator =(boost::reference_wrapper const &value) const \ + { \ + return boost::proto::env(value.get()); \ + } \ + template \ + typename boost::disable_if_c< \ + boost::is_const::value \ + , boost::proto::env::type> \ + >::type const operator =(Value &value) const \ + { \ + return boost::proto::env::type>(value); \ + } \ + template \ + boost::proto::env::type> const \ + operator =(Value const &value) const \ + { \ + return boost::proto::env::type>(value); \ + } \ + }; \ + \ + TAG const NAME = {} \ + /**/ + + namespace envns_ + { + //////////////////////////////////////////////////////////////////////////////////////////// + // env + // A transform env is a slot-based storage mechanism, accessible by tag. + template + struct env + : private Base + { + private: + Value value_; + + public: + typedef Value value_type; + typedef typename add_reference::type reference; + typedef typename add_reference::type>::type const_reference; + typedef void proto_environment_; ///< INTERNAL ONLY + + explicit env(const_reference value, Base const &base = Base()) + : Base(base) + , value_(value) + {} + + #if BOOST_WORKAROUND(__GNUC__, == 3) || (BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ <= 2) + /// INTERNAL ONLY + struct found + { + typedef Value type; + typedef typename add_reference::type>::type const_reference; + }; + + template + struct lookup + : mpl::if_c< + is_same::value + , found + , typename Base::template lookup + >::type + {}; + #else + /// INTERNAL ONLY + template + struct lookup + : Base::template lookup + {}; + + /// INTERNAL ONLY + template + struct lookup + { + typedef Value type; + typedef typename add_reference::type>::type const_reference; + }; + #endif + + // For key-based lookups not intended to fail + using Base::operator[]; + const_reference operator[](Key) const + { + return this->value_; + } + + // For key-based lookups that can fail, use the default if key not found. + using Base::at; + template + const_reference at(Key, T const &) const + { + return this->value_; + } + }; + + // define proto::data_type type and proto::data global + BOOST_PROTO_DEFINE_ENV_VAR(data_type, data); + } + + using envns_::data; + + namespace functional + { + //////////////////////////////////////////////////////////////////////////////////////// + // as_env + struct as_env + { + BOOST_PROTO_CALLABLE() + BOOST_PROTO_POLY_FUNCTION() + + /// INTERNAL ONLY + template::value> + struct impl + { + typedef env::type> result_type; + + result_type const operator()(detail::arg t) const + { + return result_type(t()); + } + }; + + /// INTERNAL ONLY + template + struct impl + { + typedef T result_type; + + typename add_const::type operator()(detail::arg t) const + { + return t(); + } + }; + + template + struct result; + + template + struct result + { + typedef typename impl::type>::result_type type; + }; + + template + typename impl::type>::result_type const + operator()(T &t BOOST_PROTO_DISABLE_IF_IS_CONST(T)) const + { + return impl::type>()( + static_cast::reference>(t) + ); + } + + template + typename impl::type>::result_type const + operator()(T const &t) const + { + return impl::type>()( + static_cast::reference>(t) + ); + } + }; + + //////////////////////////////////////////////////////////////////////////////////////// + // has_env_var + template + struct has_env_var + : detail::poly_function > + { + BOOST_PROTO_CALLABLE() + + template::value> + struct impl + { + typedef + mpl::not_< + is_same< + typename remove_reference::type::template lookup::type + , key_not_found + > + > + result_type; + + result_type operator()(detail::arg) const + { + return result_type(); + } + }; + + template + struct impl + { + typedef mpl::false_ result_type; + + result_type operator()(detail::arg) const + { + return result_type(); + } + }; + }; + + template<> + struct has_env_var + : detail::poly_function > + { + BOOST_PROTO_CALLABLE() + + template::value> + struct impl + { + typedef + mpl::not_< + is_same< + typename remove_reference::type::template lookup::type + , key_not_found + > + > + result_type; + + result_type operator()(detail::arg) const + { + return result_type(); + } + }; + + template + struct impl + { + typedef mpl::true_ result_type; + + result_type operator()(detail::arg) const + { + return result_type(); + } + }; + }; + + //////////////////////////////////////////////////////////////////////////////////////// + // env_var + template + struct env_var + : detail::poly_function > + { + BOOST_PROTO_CALLABLE() + + template + struct impl + { + typedef + typename remove_reference::type::template lookup::type + result_type; + + result_type operator()(detail::arg e) const + { + return e()[Key()]; + } + }; + }; + + template<> + struct env_var + : detail::poly_function > + { + BOOST_PROTO_CALLABLE() + + template::value> + struct impl + { + typedef Env result_type; + + result_type operator()(detail::arg e) const + { + return e(); + } + }; + + template + struct impl + { + typedef + typename remove_reference::type::template lookup::type + result_type; + + result_type operator()(detail::arg e) const + { + return e()[proto::data]; + } + }; + }; + } + + namespace result_of + { + template + struct as_env + : BOOST_PROTO_RESULT_OF + {}; + + template + struct has_env_var + : BOOST_PROTO_RESULT_OF(Env)>::type + {}; + + template + struct env_var + : BOOST_PROTO_RESULT_OF(Env)> + {}; + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // as_env + template + typename proto::result_of::as_env::type const as_env(T &t BOOST_PROTO_DISABLE_IF_IS_CONST(T)) + { + return proto::functional::as_env()(t); + } + + template + typename proto::result_of::as_env::type const as_env(T const &t) + { + return proto::functional::as_env()(t); + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // has_env_var + template + typename proto::result_of::has_env_var::type has_env_var(Env &e BOOST_PROTO_DISABLE_IF_IS_CONST(Env)) + { + return functional::has_env_var()(e); + } + + template + typename proto::result_of::has_env_var::type has_env_var(Env const &e) + { + return functional::has_env_var()(e); + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // env_var + template + typename proto::result_of::env_var::type env_var(Env &e BOOST_PROTO_DISABLE_IF_IS_CONST(Env)) + { + return functional::env_var()(e); + } + + template + typename proto::result_of::env_var::type env_var(Env const &e) + { + return functional::env_var()(e); + } + + namespace envns_ + { + //////////////////////////////////////////////////////////////////////////////////////// + // env operator, + template + inline typename disable_if_c< + is_const::value + , env::type)> + >::type const operator,(T &t, env const &head) + { + return env::type)>( + head[T1()] + , proto::as_env(t) + ); + } + + template + inline env::type)> const + operator,(T const &t, env const &head) + { + return env::type)>( + head[T1()] + , proto::as_env(t) + ); + } + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // _env_var + template + struct _env_var + : proto::transform<_env_var > + { + template + struct impl + : transform_impl + { + typedef typename impl::data::template lookup::type result_type; + BOOST_MPL_ASSERT_NOT((is_same)); // lookup failed + + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::data::template lookup::const_reference) + operator ()( + typename impl::expr_param + , typename impl::state_param + , typename impl::data_param d + ) const + { + return d[Key()]; + } + }; + }; + + struct _env + : transform<_env> + { + template + struct impl + : transform_impl + { + typedef Data result_type; + + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename impl::data_param) + operator ()( + typename impl::expr_param + , typename impl::state_param + , typename impl::data_param d + ) const + { + return d; + } + }; + }; + + /// INTERNAL ONLY + template + struct is_callable<_env_var > + : mpl::true_ + {}; + + /// INTERNAL ONLY + template + struct is_callable > + : mpl::true_ + {}; + + /// INTERNAL ONLY + template + struct is_callable > + : mpl::true_ + {}; + } +} + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +#endif diff --git a/3party/boost/boost/proto/transform/impl.hpp b/3party/boost/boost/proto/transform/impl.hpp index 80e9a624f0..5cd538b182 100644 --- a/3party/boost/boost/proto/transform/impl.hpp +++ b/3party/boost/boost/proto/transform/impl.hpp @@ -10,7 +10,12 @@ #define BOOST_PROTO_TRANSFORM_IMPL_HPP_EAN_04_03_2008 #include +#include +#include +#include #include +#include +#include #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma warning(push) @@ -19,6 +24,57 @@ namespace boost { namespace proto { + namespace envns_ + { + //////////////////////////////////////////////////////////////////////////////////////////// + struct key_not_found + {}; + + //////////////////////////////////////////////////////////////////////////////////////////// + // empty_env + struct empty_env + { + typedef void proto_environment_; + + template + struct lookup + { + typedef OtherValue type; + typedef + typename add_reference::type>::type + const_reference; + }; + + key_not_found operator[](detail::any) const + { + return key_not_found(); + } + + template + T const &at(detail::any, T const &t) const + { + return t; + } + }; + } + + //////////////////////////////////////////////////////////////////////////////////////////// + // is_env + template + struct is_env + : mpl::false_ + {}; + + template + struct is_env + : mpl::true_ + {}; + + template + struct is_env + : is_env + {}; + #ifdef BOOST_NO_RVALUE_REFERENCES /// INTERNAL ONLY @@ -39,8 +95,19 @@ namespace boost { namespace proto typename boost::proto::detail::apply_transform::result_type \ operator ()(Expr &e) const \ { \ - int i = 0; \ - return boost::proto::detail::apply_transform()(e, i, i); \ + boost::proto::empty_state s = 0; \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ + } \ + \ + template \ + BOOST_FORCEINLINE \ + typename boost::proto::detail::apply_transform::result_type \ + operator ()(Expr const &e) const \ + { \ + boost::proto::empty_state s = 0; \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ } \ \ template \ @@ -48,8 +115,17 @@ namespace boost { namespace proto typename boost::proto::detail::apply_transform::result_type \ operator ()(Expr &e, State &s) const \ { \ - int i = 0; \ - return boost::proto::detail::apply_transform()(e, s, i); \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ + } \ + \ + template \ + BOOST_FORCEINLINE \ + typename boost::proto::detail::apply_transform::result_type \ + operator ()(Expr const &e, State &s) const \ + { \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ } \ \ template \ @@ -57,8 +133,17 @@ namespace boost { namespace proto typename boost::proto::detail::apply_transform::result_type \ operator ()(Expr &e, State const &s) const \ { \ - int i = 0; \ - return boost::proto::detail::apply_transform()(e, s, i); \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ + } \ + \ + template \ + BOOST_FORCEINLINE \ + typename boost::proto::detail::apply_transform::result_type \ + operator ()(Expr const &e, State const &s) const \ + { \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ } \ \ template \ @@ -71,10 +156,26 @@ namespace boost { namespace proto \ template \ BOOST_FORCEINLINE \ + typename boost::proto::detail::apply_transform::result_type \ + operator ()(Expr const &e, State &s, Data &d) const \ + { \ + return boost::proto::detail::apply_transform()(e, s, d); \ + } \ + \ + template \ + BOOST_FORCEINLINE \ typename boost::proto::detail::apply_transform::result_type \ operator ()(Expr &e, State const &s, Data &d) const \ { \ return boost::proto::detail::apply_transform()(e, s, d); \ + } \ + \ + template \ + BOOST_FORCEINLINE \ + typename boost::proto::detail::apply_transform::result_type \ + operator ()(Expr const &e, State const &s, Data &d) const \ + { \ + return boost::proto::detail::apply_transform()(e, s, d); \ } \ /**/ @@ -98,8 +199,9 @@ namespace boost { namespace proto typename boost::proto::detail::apply_transform::result_type \ operator ()(Expr &&e) const \ { \ - int i = 0; \ - return boost::proto::detail::apply_transform()(e, i, i); \ + boost::proto::empty_state s = 0; \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ } \ \ template \ @@ -107,8 +209,8 @@ namespace boost { namespace proto typename boost::proto::detail::apply_transform::result_type \ operator ()(Expr &&e, State &&s) const \ { \ - int i = 0; \ - return boost::proto::detail::apply_transform()(e, s, i); \ + boost::proto::empty_env d; \ + return boost::proto::detail::apply_transform()(e, s, d); \ } \ \ template \ @@ -133,12 +235,12 @@ namespace boost { namespace proto template struct apply_transform - : PrimitiveTransform::template impl + : PrimitiveTransform::template impl {}; template struct apply_transform - : PrimitiveTransform::template impl + : PrimitiveTransform::template impl {}; template diff --git a/3party/boost/boost/proto/transform/make.hpp b/3party/boost/boost/proto/transform/make.hpp index 1f183d9343..140ca1d7b6 100644 --- a/3party/boost/boost/proto/transform/make.hpp +++ b/3party/boost/boost/proto/transform/make.hpp @@ -100,7 +100,7 @@ namespace boost { namespace proto static bool const applied = true; }; - #if BOOST_WORKAROUND(__GNUC__, == 3) || (__GNUC__ == 4 && __GNUC_MINOR__ == 0) + #if BOOST_WORKAROUND(__GNUC__, == 3) || (BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0) // work around GCC bug template struct make_if_, Expr, State, Data, false> diff --git a/3party/boost/boost/proto/transform/pass_through.hpp b/3party/boost/boost/proto/transform/pass_through.hpp index d53d15a840..9c43008966 100644 --- a/3party/boost/boost/proto/transform/pass_through.hpp +++ b/3party/boost/boost/proto/transform/pass_through.hpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include #include #include @@ -33,6 +35,7 @@ namespace boost { namespace proto { template< typename Grammar + , typename Domain , typename Expr , typename State , typename Data @@ -43,8 +46,8 @@ namespace boost { namespace proto #include - template - struct pass_through_impl + template + struct pass_through_impl : transform_impl { typedef Expr result_type; @@ -53,11 +56,7 @@ namespace boost { namespace proto /// \return \c e /// \throw nothrow BOOST_FORCEINLINE - #ifdef BOOST_PROTO_STRICT_RESULT_OF - result_type - #else - typename pass_through_impl::expr_param - #endif + BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, typename pass_through_impl::expr_param) operator()( typename pass_through_impl::expr_param e , typename pass_through_impl::state_param @@ -120,20 +119,20 @@ namespace boost { namespace proto /// > /// {}; /// \endcode - template + template struct pass_through - : transform > + : transform > { template struct impl - : detail::pass_through_impl + : detail::pass_through_impl {}; }; /// INTERNAL ONLY /// - template - struct is_callable > + template + struct is_callable > : mpl::true_ {}; diff --git a/3party/boost/boost/proto/transform/when.hpp b/3party/boost/boost/proto/transform/when.hpp index bd4cb9fa6a..d1defb81b2 100644 --- a/3party/boost/boost/proto/transform/when.hpp +++ b/3party/boost/boost/proto/transform/when.hpp @@ -16,11 +16,13 @@ #include #include #include +#include #include #include #include #include #include +#include #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma warning(push) @@ -155,6 +157,14 @@ namespace boost { namespace proto : when<_, Fun> {}; + namespace envns_ + { + // Define the transforms global + BOOST_PROTO_DEFINE_ENV_VAR(transforms_type, transforms); + } + + using envns_::transforms; + /// \brief This specialization uses the Data parameter as a collection /// of transforms that can be indexed by the specified rule. /// @@ -174,12 +184,13 @@ namespace boost { namespace proto template struct impl - : Data::template when::template impl - {}; - - template - struct impl - : Data::template when::template impl + : remove_reference< + typename mpl::eval_if_c< + proto::result_of::has_env_var::value + , proto::result_of::env_var + , proto::result_of::env_var + >::type + >::type::template when::template impl {}; }; diff --git a/3party/boost/boost/random/discrete_distribution.hpp b/3party/boost/boost/random/discrete_distribution.hpp index bbdc055383..fc268b8333 100644 --- a/3party/boost/boost/random/discrete_distribution.hpp +++ b/3party/boost/boost/random/discrete_distribution.hpp @@ -7,7 +7,7 @@ * * See http://www.boost.org for most recent version including documentation. * - * $Id: discrete_distribution.hpp 79771 2012-07-27 18:15:55Z jewillco $ + * $Id: discrete_distribution.hpp 80996 2012-10-16 03:11:52Z marshall $ */ #ifndef BOOST_RANDOM_DISCRETE_DISTRIBUTION_HPP_INCLUDED diff --git a/3party/boost/boost/random/piecewise_constant_distribution.hpp b/3party/boost/boost/random/piecewise_constant_distribution.hpp index dbeadae3a9..4a3c7698ca 100644 --- a/3party/boost/boost/random/piecewise_constant_distribution.hpp +++ b/3party/boost/boost/random/piecewise_constant_distribution.hpp @@ -7,7 +7,7 @@ * * See http://www.boost.org for most recent version including documentation. * - * $Id: piecewise_constant_distribution.hpp 79771 2012-07-27 18:15:55Z jewillco $ + * $Id: piecewise_constant_distribution.hpp 80996 2012-10-16 03:11:52Z marshall $ */ #ifndef BOOST_RANDOM_PIECEWISE_CONSTANT_DISTRIBUTION_HPP_INCLUDED diff --git a/3party/boost/boost/random/piecewise_linear_distribution.hpp b/3party/boost/boost/random/piecewise_linear_distribution.hpp index b7b6860cbc..6abe022cea 100644 --- a/3party/boost/boost/random/piecewise_linear_distribution.hpp +++ b/3party/boost/boost/random/piecewise_linear_distribution.hpp @@ -7,7 +7,7 @@ * * See http://www.boost.org for most recent version including documentation. * - * $Id: piecewise_linear_distribution.hpp 79771 2012-07-27 18:15:55Z jewillco $ + * $Id: piecewise_linear_distribution.hpp 80996 2012-10-16 03:11:52Z marshall $ */ #ifndef BOOST_RANDOM_PIECEWISE_LINEAR_DISTRIBUTION_HPP_INCLUDED diff --git a/3party/boost/boost/random/seed_seq.hpp b/3party/boost/boost/random/seed_seq.hpp index 44798f21bc..a395dec86d 100644 --- a/3party/boost/boost/random/seed_seq.hpp +++ b/3party/boost/boost/random/seed_seq.hpp @@ -7,7 +7,7 @@ * * See http://www.boost.org for most recent version including documentation. * - * $Id: seed_seq.hpp 79771 2012-07-27 18:15:55Z jewillco $ + * $Id: seed_seq.hpp 80996 2012-10-16 03:11:52Z marshall $ * */ diff --git a/3party/boost/boost/random/subtract_with_carry.hpp b/3party/boost/boost/random/subtract_with_carry.hpp index 298eb33475..af82290df4 100644 --- a/3party/boost/boost/random/subtract_with_carry.hpp +++ b/3party/boost/boost/random/subtract_with_carry.hpp @@ -7,7 +7,7 @@ * * See http://www.boost.org for most recent version including documentation. * - * $Id: subtract_with_carry.hpp 72951 2011-07-07 04:57:37Z steven_watanabe $ + * $Id: subtract_with_carry.hpp 80996 2012-10-16 03:11:52Z marshall $ * * Revision history * 2002-03-02 created @@ -354,7 +354,7 @@ public: boost::uint32_t, value) { init_modulus(); seed(value); } /** - * Creates a new \subtract_with_carry_01_engine and seeds with with values + * Creates a new \subtract_with_carry_01_engine and seeds with values * produced by seq.generate(). */ BOOST_RANDOM_DETAIL_SEED_SEQ_CONSTRUCTOR(subtract_with_carry_01_engine, diff --git a/3party/boost/boost/range/algorithm/for_each.hpp b/3party/boost/boost/range/algorithm/for_each.hpp index 4f5108d641..fe8ab808d9 100644 --- a/3party/boost/boost/range/algorithm/for_each.hpp +++ b/3party/boost/boost/range/algorithm/for_each.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include diff --git a/3party/boost/boost/ratio/config.hpp b/3party/boost/boost/ratio/config.hpp new file mode 100644 index 0000000000..67a60fccfc --- /dev/null +++ b/3party/boost/boost/ratio/config.hpp @@ -0,0 +1,86 @@ +// config.hpp ---------------------------------------------------------------// + +// Copyright 2012 Vicente J. Botet Escriba + +// Distributed under the Boost Software License, Version 1.0. +// See http://www.boost.org/LICENSE_1_0.txt + + +#ifndef BOOST_RATIO_CONFIG_HPP +#define BOOST_RATIO_CONFIG_HPP + +#include +#include + + +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) || !defined(__GXX_EXPERIMENTAL_CXX0X__) +# if ! defined BOOST_NO_CXX11_U16STRING +# define BOOST_NO_CXX11_U16STRING +# endif +# if ! defined BOOST_NO_CXX11_U32STRING +# define BOOST_NO_CXX11_U32STRING +# endif +#endif + + +#if !defined BOOST_RATIO_VERSION +#define BOOST_RATIO_VERSION 1 +#else +#if BOOST_RATIO_VERSION!=1 && BOOST_RATIO_VERSION!=2 +#error "BOOST_RATIO_VERSION must be 1 or 2" +#endif +#endif + +#if BOOST_RATIO_VERSION==1 +#if ! defined BOOST_RATIO_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V2_0_0 +#define BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0 +#endif +#endif + +#if BOOST_RATIO_VERSION==2 +#if ! defined BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0 +#define BOOST_RATIO_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V2_0_0 +#endif +#endif + +#ifdef INTMAX_C +#define BOOST_RATIO_INTMAX_C(a) INTMAX_C(a) +#else +#define BOOST_RATIO_INTMAX_C(a) a##LL +#endif + +#define BOOST_RATIO_INTMAX_T_MAX (0x7FFFFFFFFFFFFFFELL) + + +#ifndef BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG) +#elif defined(BOOST_RATIO_USES_STATIC_ASSERT) +#include +#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) BOOST_STATIC_ASSERT(CND) +#elif defined(BOOST_RATIO_USES_MPL_ASSERT) +#include +#include +#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) \ + BOOST_MPL_ASSERT_MSG(boost::mpl::bool_< (CND) >::type::value, MSG, TYPES) +#else +//~ #elif defined(BOOST_RATIO_USES_ARRAY_ASSERT) +#define BOOST_RATIO_CONCAT(A,B) A##B +#define BOOST_RATIO_NAME(A,B) BOOST_RATIO_CONCAT(A,B) +#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) static char BOOST_RATIO_NAME(__boost_ratio_test_,__LINE__)[(CND)?1:-1] +//~ #define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) +#endif + +#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) || !defined(BOOST_RATIO_USES_MPL_ASSERT) +#define BOOST_RATIO_OVERFLOW_IN_ADD "overflow in ratio add" +#define BOOST_RATIO_OVERFLOW_IN_SUB "overflow in ratio sub" +#define BOOST_RATIO_OVERFLOW_IN_MUL "overflow in ratio mul" +#define BOOST_RATIO_OVERFLOW_IN_DIV "overflow in ratio div" +#define BOOST_RATIO_NUMERATOR_IS_OUT_OF_RANGE "ratio numerator is out of range" +#define BOOST_RATIO_DIVIDE_BY_0 "ratio divide by 0" +#define BOOST_RATIO_DENOMINATOR_IS_OUT_OF_RANGE "ratio denominator is out of range" +#endif + + +//#define BOOST_RATIO_EXTENSIONS + +#endif // header diff --git a/3party/boost/boost/ratio/detail/overflow_helpers.hpp b/3party/boost/boost/ratio/detail/overflow_helpers.hpp index a95467f743..0e292fa697 100644 --- a/3party/boost/boost/ratio/detail/overflow_helpers.hpp +++ b/3party/boost/boost/ratio/detail/overflow_helpers.hpp @@ -32,6 +32,7 @@ time2_demo contained this comment: #ifndef BOOST_RATIO_DETAIL_RATIO_OPERATIONS_HPP #define BOOST_RATIO_DETAIL_RATIO_OPERATIONS_HPP +#include #include #include #include @@ -42,35 +43,6 @@ time2_demo contained this comment: #include #include -#if !defined(BOOST_NO_STATIC_ASSERT) || !defined(BOOST_RATIO_USES_MPL_ASSERT) -#define BOOST_RATIO_OVERFLOW_IN_ADD "overflow in ratio add" -#define BOOST_RATIO_OVERFLOW_IN_SUB "overflow in ratio sub" -#define BOOST_RATIO_OVERFLOW_IN_MUL "overflow in ratio mul" -#define BOOST_RATIO_OVERFLOW_IN_DIV "overflow in ratio div" -#define BOOST_RATIO_NUMERATOR_IS_OUT_OF_RANGE "ratio numerator is out of range" -#define BOOST_RATIO_DIVIDE_BY_0 "ratio divide by 0" -#define BOOST_RATIO_DENOMINATOR_IS_OUT_OF_RANGE "ratio denominator is out of range" -#endif - -#ifndef BOOST_NO_STATIC_ASSERT -#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) static_assert(CND,MSG) -#elif defined(BOOST_RATIO_USES_STATIC_ASSERT) -#include -#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) BOOST_STATIC_ASSERT(CND) -#elif defined(BOOST_RATIO_USES_MPL_ASSERT) -#include -#include -#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) \ - BOOST_MPL_ASSERT_MSG(boost::mpl::bool_< (CND) >::type::value, MSG, TYPES) -#else -//~ #elif defined(BOOST_RATIO_USES_ARRAY_ASSERT) -#define BOOST_RATIO_CONCAT(A,B) A##B -#define BOOST_RATIO_NAME(A,B) BOOST_RATIO_CONCAT(A,B) -#define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) static char BOOST_RATIO_NAME(__boost_ratio_test_,__LINE__)[(CND)?1:-1] -//~ #define BOOST_RATIO_STATIC_ASSERT(CND, MSG, TYPES) -#endif - - // // We simply cannot include this header on gcc without getting copious warnings of the kind: // @@ -273,7 +245,7 @@ namespace ratio_detail > >::type type; }; - + template struct ratio_subtract > { @@ -322,7 +294,7 @@ namespace ratio_detail ((R2::num / gcd_n1_n2 ==1) && (R1::den / gcd_d1_d2)==1) > type; }; - + template struct is_ratio : public boost::false_type {}; diff --git a/3party/boost/boost/ratio/detail/ratio_io.hpp b/3party/boost/boost/ratio/detail/ratio_io.hpp new file mode 100644 index 0000000000..2b17f507c8 --- /dev/null +++ b/3party/boost/boost/ratio/detail/ratio_io.hpp @@ -0,0 +1,1045 @@ +// ratio_io +// +// (C) Copyright Howard Hinnant +// (C) Copyright 2010 Vicente J. Botet Escriba +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// This code was adapted by Vicente from Howard Hinnant's experimental work +// on chrono i/o under lvm/libc++ to Boost + +#ifndef BOOST_RATIO_DETAIL_RATIO_IO_HPP +#define BOOST_RATIO_DETAIL_RATIO_IO_HPP + +/* + + ratio_io synopsis + +#include +#include + +namespace boost +{ + +template +struct ratio_string +{ + static basic_string short_name(); + static basic_string long_name(); +}; + +} // boost + +*/ + +#include +#include +#include +#include +#include + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +#include +#include +#endif + +#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T) || defined(BOOST_NO_CXX11_U16STRING) || defined(BOOST_NO_CXX11_U32STRING) +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT +#undef BOOST_RATIO_HAS_UNICODE_SUPPORT +#endif +#else +#define BOOST_RATIO_HAS_UNICODE_SUPPORT 1 +#endif + +namespace boost { + +//template +//struct ratio_string_is_localizable : false_type {}; +//template +//struct ratio_string_id : integral_constant {}; + +template +struct ratio_string +{ + static std::basic_string short_name() {return long_name();} + static std::basic_string long_name(); + static std::basic_string symbol() {return short_name();} + static std::basic_string prefix() {return long_name();} +}; + +template +std::basic_string +ratio_string::long_name() +{ + std::basic_ostringstream os; + os << CharT('[') << Ratio::num << CharT('/') + << Ratio::den << CharT(']'); + return os.str(); +} + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +namespace ratio_detail { +template +struct ratio_string_static +{ + static std::string short_name() { + return std::basic_string( + static_string::c_str< + typename ratio_static_string::short_name + >::value); + } + static std::string long_name() { + return std::basic_string( + static_string::c_str< + typename ratio_static_string::long_name + >::value); + } + static std::basic_string symbol() {return short_name();} + static std::basic_string prefix() {return long_name();} +}; +} +#endif +// atto +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'a');} + static std::string long_name() {return std::string("atto");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'a');} + static std::u16string long_name() {return std::u16string(u"atto");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'a');} + static std::u32string long_name() {return std::u32string(U"atto");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'a');} + static std::wstring long_name() {return std::wstring(L"atto");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// femto + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else + +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'f');} + static std::string long_name() {return std::string("femto");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'f');} + static std::u16string long_name() {return std::u16string(u"femto");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'f');} + static std::u32string long_name() {return std::u32string(U"femto");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'f');} + static std::wstring long_name() {return std::wstring(L"femto");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// pico + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'p');} + static std::string long_name() {return std::string("pico");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'p');} + static std::u16string long_name() {return std::u16string(u"pico");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'p');} + static std::u32string long_name() {return std::u32string(U"pico");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'p');} + static std::wstring long_name() {return std::wstring(L"pico");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// nano + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'n');} + static std::string long_name() {return std::string("nano");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'n');} + static std::u16string long_name() {return std::u16string(u"nano");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'n');} + static std::u32string long_name() {return std::u32string(U"nano");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'n');} + static std::wstring long_name() {return std::wstring(L"nano");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// micro + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string("\xC2\xB5");} + static std::string long_name() {return std::string("micro");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'\xB5');} + static std::u16string long_name() {return std::u16string(u"micro");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'\xB5');} + static std::u32string long_name() {return std::u32string(U"micro");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'\xB5');} + static std::wstring long_name() {return std::wstring(L"micro");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// milli + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'm');} + static std::string long_name() {return std::string("milli");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'm');} + static std::u16string long_name() {return std::u16string(u"milli");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'm');} + static std::u32string long_name() {return std::u32string(U"milli");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'm');} + static std::wstring long_name() {return std::wstring(L"milli");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// centi + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'c');} + static std::string long_name() {return std::string("centi");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'c');} + static std::u16string long_name() {return std::u16string(u"centi");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'c');} + static std::u32string long_name() {return std::u32string(U"centi");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'c');} + static std::wstring long_name() {return std::wstring(L"centi");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// deci + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else + +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'd');} + static std::string long_name() {return std::string("deci");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'd');} + static std::u16string long_name() {return std::u16string(u"deci");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'd');} + static std::u32string long_name() {return std::u32string(U"deci");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'd');} + static std::wstring long_name() {return std::wstring(L"deci");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// unit + +//template <> +//struct ratio_string_is_localizable > : true_type {}; +// +//template <> +//struct ratio_string_id > : integral_constant {}; +// deca + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string("da");} + static std::string long_name() {return std::string("deca");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(u"da");} + static std::u16string long_name() {return std::u16string(u"deca");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(U"da");} + static std::u32string long_name() {return std::u32string(U"deca");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(L"da");} + static std::wstring long_name() {return std::wstring(L"deca");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// hecto + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'h');} + static std::string long_name() {return std::string("hecto");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'h');} + static std::u16string long_name() {return std::u16string(u"hecto");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'h');} + static std::u32string long_name() {return std::u32string(U"hecto");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'h');} + static std::wstring long_name() {return std::wstring(L"hecto");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// kilo + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'k');} + static std::string long_name() {return std::string("kilo");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'k');} + static std::u16string long_name() {return std::u16string(u"kilo");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'k');} + static std::u32string long_name() {return std::u32string(U"kilo");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'k');} + static std::wstring long_name() {return std::wstring(L"kilo");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// mega + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else + +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'M');} + static std::string long_name() {return std::string("mega");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'M');} + static std::u16string long_name() {return std::u16string(u"mega");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'M');} + static std::u32string long_name() {return std::u32string(U"mega");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'M');} + static std::wstring long_name() {return std::wstring(L"mega");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// giga + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else + +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'G');} + static std::string long_name() {return std::string("giga");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'G');} + static std::u16string long_name() {return std::u16string(u"giga");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'G');} + static std::u32string long_name() {return std::u32string(U"giga");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'G');} + static std::wstring long_name() {return std::wstring(L"giga");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// tera + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'T');} + static std::string long_name() {return std::string("tera");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'T');} + static std::u16string long_name() {return std::u16string(u"tera");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'T');} + static std::u32string long_name() {return std::u32string(U"tera");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'T');} + static std::wstring long_name() {return std::wstring(L"tera");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// peta + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'P');} + static std::string long_name() {return std::string("peta");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'P');} + static std::u16string long_name() {return std::u16string(u"peta");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'P');} + static std::u32string long_name() {return std::u32string(U"peta");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'P');} + static std::wstring long_name() {return std::wstring(L"peta");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +// exa + +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; + +#ifdef BOOST_RATIO_HAS_STATIC_STRING +template +struct ratio_string : + ratio_detail::ratio_string_static +{}; + +#else +template <> +struct ratio_string +{ + static std::string short_name() {return std::string(1, 'E');} + static std::string long_name() {return std::string("exa");} + static std::string symbol() {return short_name();} + static std::string prefix() {return long_name();} +}; + +#if BOOST_RATIO_HAS_UNICODE_SUPPORT + +template <> +struct ratio_string +{ + static std::u16string short_name() {return std::u16string(1, u'E');} + static std::u16string long_name() {return std::u16string(u"exa");} + static std::u16string symbol() {return short_name();} + static std::u16string prefix() {return long_name();} +}; + +template <> +struct ratio_string +{ + static std::u32string short_name() {return std::u32string(1, U'E');} + static std::u32string long_name() {return std::u32string(U"exa");} + static std::u32string symbol() {return short_name();} + static std::u32string prefix() {return long_name();} +}; + +#endif + +#ifndef BOOST_NO_STD_WSTRING +template <> +struct ratio_string +{ + static std::wstring short_name() {return std::wstring(1, L'E');} + static std::wstring long_name() {return std::wstring(L"exa");} + static std::wstring symbol() {return short_name();} + static std::wstring prefix() {return long_name();} +}; +#endif +#endif + +} + +#endif // BOOST_RATIO_RATIO_IO_HPP diff --git a/3party/boost/boost/ratio/ratio.hpp b/3party/boost/boost/ratio/ratio.hpp index 2e17468b99..546e8f0868 100644 --- a/3party/boost/boost/ratio/ratio.hpp +++ b/3party/boost/boost/ratio/ratio.hpp @@ -32,7 +32,7 @@ time2_demo contained this comment: #ifndef BOOST_RATIO_RATIO_HPP #define BOOST_RATIO_RATIO_HPP -#include +#include #include #include #include @@ -46,7 +46,7 @@ time2_demo contained this comment: #include #include #include -#ifdef BOOST_RATIO_EXTENSIONS +#ifdef BOOST_RATIO_EXTENSIONS #include #include #endif @@ -72,7 +72,7 @@ namespace boost // 20.6.1 Class template ratio [ratio.ratio] // // // //----------------------------------------------------------------------------// - + template class ratio { @@ -88,12 +88,12 @@ public: BOOST_STATIC_CONSTEXPR boost::intmax_t num = SIGN_N * ABS_N / GCD; BOOST_STATIC_CONSTEXPR boost::intmax_t den = ABS_D / GCD; -#ifdef BOOST_RATIO_EXTENSIONS +#ifdef BOOST_RATIO_EXTENSIONS typedef mpl::rational_c_tag tag; typedef boost::rational value_type; typedef boost::intmax_t num_type; typedef boost::intmax_t den_type; - ratio() + ratio() {} template ratio(const ratio<_N2, _D2>&, @@ -101,7 +101,7 @@ public: < (ratio<_N2, _D2>::num == num && ratio<_N2, _D2>::den == den) - >::type* = 0) + >::type* = 0) {} template @@ -112,14 +112,14 @@ public: ratio& >::type operator=(const ratio<_N2, _D2>&) {return *this;} - + static value_type value() {return value_type(num,den);} value_type operator()() const {return value();} #endif typedef ratio type; }; -#if defined(BOOST_NO_CONSTEXPR) +#if defined(BOOST_NO_CXX11_CONSTEXPR) template const boost::intmax_t ratio::num; template @@ -133,26 +133,26 @@ const boost::intmax_t ratio::den; //----------------------------------------------------------------------------// template -struct ratio_add -: boost::ratio_detail::ratio_add::type +struct ratio_add +: boost::ratio_detail::ratio_add::type { }; template struct ratio_subtract -: boost::ratio_detail::ratio_subtract::type +: boost::ratio_detail::ratio_subtract::type { }; template struct ratio_multiply -: boost::ratio_detail::ratio_multiply::type +: boost::ratio_detail::ratio_multiply::type { }; template struct ratio_divide -: boost::ratio_detail::ratio_divide::type +: boost::ratio_detail::ratio_divide::type { }; @@ -167,46 +167,46 @@ struct ratio_divide template struct ratio_equal : public boost::integral_constant + (R1::num == R2::num && R1::den == R2::den)> {}; template struct ratio_not_equal - : public boost::integral_constant::value> + : public boost::integral_constant::value> {}; // ratio_less template struct ratio_less - : boost::integral_constant::value> + : boost::integral_constant::value> {}; template struct ratio_less_equal - : boost::integral_constant::value> + : boost::integral_constant::value> {}; template struct ratio_greater - : boost::integral_constant::value> + : boost::integral_constant::value> {}; template struct ratio_greater_equal - : boost::integral_constant::value> + : boost::integral_constant::value> {}; template -struct ratio_gcd : +struct ratio_gcd : ratio::value, - mpl::lcm_c::value>::type + mpl::lcm_c::value>::type { }; - -#ifdef BOOST_RATIO_EXTENSIONS + +#ifdef BOOST_RATIO_EXTENSIONS template -struct ratio_negate +struct ratio_negate : ratio<-R::num, R::den>::type { }; @@ -221,12 +221,12 @@ struct ratio_sign { }; template -struct ratio_lcm : +struct ratio_lcm : ratio::value, - mpl::gcd_c::value>::type + mpl::gcd_c::value>::type { }; -#endif +#endif } // namespace boost diff --git a/3party/boost/boost/ratio/ratio_fwd.hpp b/3party/boost/boost/ratio/ratio_fwd.hpp index 9ce9609af1..0882e0bb31 100644 --- a/3party/boost/boost/ratio/ratio_fwd.hpp +++ b/3party/boost/boost/ratio/ratio_fwd.hpp @@ -32,12 +32,7 @@ time2_demo contained this comment: #ifndef BOOST_RATIO_RATIO_FWD_HPP #define BOOST_RATIO_RATIO_FWD_HPP -#include -#ifdef INTMAX_C -#define BOOST_RATIO_INTMAX_C(a) INTMAX_C(a) -#else -#define BOOST_RATIO_INTMAX_C(a) a##LL -#endif +#include namespace boost { @@ -82,7 +77,7 @@ typedef ratio< BOOST_RATIO_INTMAX_C(1000000000), BOOST_RATIO_INTMAX_C(1) typedef ratio< BOOST_RATIO_INTMAX_C(1000000000000), BOOST_RATIO_INTMAX_C(1)> tera; typedef ratio< BOOST_RATIO_INTMAX_C(1000000000000000), BOOST_RATIO_INTMAX_C(1)> peta; typedef ratio exa; - + } // namespace boost diff --git a/3party/boost/boost/ratio/ratio_io.hpp b/3party/boost/boost/ratio/ratio_io.hpp index 1b87788ca9..b3c7272c6c 100644 --- a/3party/boost/boost/ratio/ratio_io.hpp +++ b/3party/boost/boost/ratio/ratio_io.hpp @@ -6,7 +6,7 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt). // -// This code was adapted by Vicente from Howard Hinnant's experimental work +// This code was adapted by Vicente from Howard Hinnant's experimental work // on chrono i/o under lvm/libc++ to Boost #ifndef BOOST_RATIO_RATIO_IO_HPP @@ -25,13 +25,18 @@ namespace boost template struct ratio_string { - static basic_string short_name(); - static basic_string long_name(); + static basic_string prefix(); + static basic_string symbol(); }; } // boost */ +#include + +#ifdef BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0 +#include +#else #include #include @@ -44,31 +49,31 @@ struct ratio_string #include #endif -#if defined(BOOST_NO_UNICODE_LITERALS) || defined(BOOST_NO_CHAR16_T) || defined(BOOST_NO_CHAR32_T) -//~ #define BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T) || defined(BOOST_NO_CXX11_U16STRING) || defined(BOOST_NO_CXX11_U32STRING) +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT +#undef BOOST_RATIO_HAS_UNICODE_SUPPORT +#endif #else #define BOOST_RATIO_HAS_UNICODE_SUPPORT 1 #endif namespace boost { -template -struct ratio_string_is_localizable : false_type {}; -template -struct ratio_string_id : integral_constant {}; +//template +//struct ratio_string_is_localizable : false_type {}; +//template +//struct ratio_string_id : integral_constant {}; template struct ratio_string { - static std::basic_string short_name() {return long_name();} - static std::basic_string long_name(); - static std::basic_string symbol() {return short_name();} - static std::basic_string prefix() {return long_name();} + static std::basic_string symbol() {return prefix();} + static std::basic_string prefix(); }; template std::basic_string -ratio_string::long_name() +ratio_string::prefix() { std::basic_ostringstream os; os << CharT('[') << Ratio::num << CharT('/') @@ -81,64 +86,56 @@ namespace ratio_detail { template struct ratio_string_static { - static std::string short_name() { + static std::string symbol() { return std::basic_string( static_string::c_str< - typename ratio_static_string::short_name + typename ratio_static_string::symbol >::value); } - static std::string long_name() { + static std::string prefix() { return std::basic_string( static_string::c_str< - typename ratio_static_string::long_name + typename ratio_static_string::prefix >::value); } - static std::basic_string symbol() {return short_name();} - static std::basic_string prefix() {return long_name();} }; } #endif // atto -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; +//template <> +//struct ratio_string_is_localizable : true_type {}; +// +//template <> +//struct ratio_string_id : integral_constant {}; #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'a');} - static std::string long_name() {return std::string("atto");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'a');} + static std::string prefix() {return std::string("atto");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'a');} - static std::u16string long_name() {return std::u16string(u"atto");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'a');} + static std::u16string prefix() {return std::u16string(u"atto");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'a');} - static std::u32string long_name() {return std::u32string(U"atto");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'a');} + static std::u32string prefix() {return std::u32string(U"atto");} }; #endif @@ -147,26 +144,18 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'a');} - static std::wstring long_name() {return std::wstring(L"atto");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'a');} + static std::wstring prefix() {return std::wstring(L"atto");} }; #endif #endif // femto -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else @@ -174,30 +163,24 @@ struct ratio_string : template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'f');} - static std::string long_name() {return std::string("femto");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'f');} + static std::string prefix() {return std::string("femto");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'f');} - static std::u16string long_name() {return std::u16string(u"femto");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'f');} + static std::u16string prefix() {return std::u16string(u"femto");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'f');} - static std::u32string long_name() {return std::u32string(U"femto");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'f');} + static std::u32string prefix() {return std::u32string(U"femto");} }; #endif @@ -206,56 +189,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'f');} - static std::wstring long_name() {return std::wstring(L"femto");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'f');} + static std::wstring prefix() {return std::wstring(L"femto");} }; #endif #endif // pico -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'p');} - static std::string long_name() {return std::string("pico");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'p');} + static std::string prefix() {return std::string("pico");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'p');} - static std::u16string long_name() {return std::u16string(u"pico");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'p');} + static std::u16string prefix() {return std::u16string(u"pico");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'p');} - static std::u32string long_name() {return std::u32string(U"pico");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'p');} + static std::u32string prefix() {return std::u32string(U"pico");} }; #endif @@ -264,56 +233,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'p');} - static std::wstring long_name() {return std::wstring(L"pico");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'p');} + static std::wstring prefix() {return std::wstring(L"pico");} }; #endif #endif // nano -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'n');} - static std::string long_name() {return std::string("nano");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'n');} + static std::string prefix() {return std::string("nano");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'n');} - static std::u16string long_name() {return std::u16string(u"nano");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'n');} + static std::u16string prefix() {return std::u16string(u"nano");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'n');} - static std::u32string long_name() {return std::u32string(U"nano");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'n');} + static std::u32string prefix() {return std::u32string(U"nano");} }; #endif @@ -322,56 +277,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'n');} - static std::wstring long_name() {return std::wstring(L"nano");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'n');} + static std::wstring prefix() {return std::wstring(L"nano");} }; #endif #endif // micro -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string("\xC2\xB5");} - static std::string long_name() {return std::string("micro");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string("\xC2\xB5");} + static std::string prefix() {return std::string("micro");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'\xB5');} - static std::u16string long_name() {return std::u16string(u"micro");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'\xB5');} + static std::u16string prefix() {return std::u16string(u"micro");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'\xB5');} - static std::u32string long_name() {return std::u32string(U"micro");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'\xB5');} + static std::u32string prefix() {return std::u32string(U"micro");} }; #endif @@ -380,56 +321,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'\xB5');} - static std::wstring long_name() {return std::wstring(L"micro");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'\xB5');} + static std::wstring prefix() {return std::wstring(L"micro");} }; #endif #endif // milli -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'm');} - static std::string long_name() {return std::string("milli");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'm');} + static std::string prefix() {return std::string("milli");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'm');} - static std::u16string long_name() {return std::u16string(u"milli");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'm');} + static std::u16string prefix() {return std::u16string(u"milli");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'm');} - static std::u32string long_name() {return std::u32string(U"milli");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'm');} + static std::u32string prefix() {return std::u32string(U"milli");} }; #endif @@ -438,56 +365,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'm');} - static std::wstring long_name() {return std::wstring(L"milli");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'm');} + static std::wstring prefix() {return std::wstring(L"milli");} }; #endif #endif // centi -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'c');} - static std::string long_name() {return std::string("centi");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'c');} + static std::string prefix() {return std::string("centi");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'c');} - static std::u16string long_name() {return std::u16string(u"centi");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'c');} + static std::u16string prefix() {return std::u16string(u"centi");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'c');} - static std::u32string long_name() {return std::u32string(U"centi");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'c');} + static std::u32string prefix() {return std::u32string(U"centi");} }; #endif @@ -496,26 +409,18 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'c');} - static std::wstring long_name() {return std::wstring(L"centi");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'c');} + static std::wstring prefix() {return std::wstring(L"centi");} }; #endif #endif // deci -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else @@ -523,30 +428,24 @@ struct ratio_string : template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'd');} - static std::string long_name() {return std::string("deci");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'd');} + static std::string prefix() {return std::string("deci");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'd');} - static std::u16string long_name() {return std::u16string(u"deci");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'd');} + static std::u16string prefix() {return std::u16string(u"deci");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'd');} - static std::u32string long_name() {return std::u32string(U"deci");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'd');} + static std::u32string prefix() {return std::u32string(U"deci");} }; #endif @@ -555,63 +454,45 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'd');} - static std::wstring long_name() {return std::wstring(L"deci");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'd');} + static std::wstring prefix() {return std::wstring(L"deci");} }; #endif #endif // unit -template <> -struct ratio_string_is_localizable > : true_type {}; - -template <> -struct ratio_string_id > : integral_constant {}; // deca -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string("da");} - static std::string long_name() {return std::string("deca");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string("da");} + static std::string prefix() {return std::string("deca");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(u"da");} - static std::u16string long_name() {return std::u16string(u"deca");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(u"da");} + static std::u16string prefix() {return std::u16string(u"deca");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(U"da");} - static std::u32string long_name() {return std::u32string(U"deca");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(U"da");} + static std::u32string prefix() {return std::u32string(U"deca");} }; #endif @@ -620,57 +501,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(L"da");} - static std::wstring long_name() {return std::wstring(L"deca");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(L"da");} + static std::wstring prefix() {return std::wstring(L"deca");} }; #endif #endif // hecto -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'h');} - static std::string long_name() {return std::string("hecto");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'h');} + static std::string prefix() {return std::string("hecto");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'h');} - static std::u16string long_name() {return std::u16string(u"hecto");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'h');} + static std::u16string prefix() {return std::u16string(u"hecto");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'h');} - static std::u32string long_name() {return std::u32string(U"hecto");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'h');} + static std::u32string prefix() {return std::u32string(U"hecto");} }; #endif @@ -679,56 +545,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'h');} - static std::wstring long_name() {return std::wstring(L"hecto");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'h');} + static std::wstring prefix() {return std::wstring(L"hecto");} }; #endif #endif // kilo -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'k');} - static std::string long_name() {return std::string("kilo");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'k');} + static std::string prefix() {return std::string("kilo");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'k');} - static std::u16string long_name() {return std::u16string(u"kilo");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'k');} + static std::u16string prefix() {return std::u16string(u"kilo");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'k');} - static std::u32string long_name() {return std::u32string(U"kilo");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'k');} + static std::u32string prefix() {return std::u32string(U"kilo");} }; #endif @@ -737,26 +589,18 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'k');} - static std::wstring long_name() {return std::wstring(L"kilo");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'k');} + static std::wstring prefix() {return std::wstring(L"kilo");} }; #endif #endif // mega -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else @@ -764,30 +608,24 @@ struct ratio_string : template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'M');} - static std::string long_name() {return std::string("mega");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'M');} + static std::string prefix() {return std::string("mega");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'M');} - static std::u16string long_name() {return std::u16string(u"mega");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'M');} + static std::u16string prefix() {return std::u16string(u"mega");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'M');} - static std::u32string long_name() {return std::u32string(U"mega");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'M');} + static std::u32string prefix() {return std::u32string(U"mega");} }; #endif @@ -796,26 +634,18 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'M');} - static std::wstring long_name() {return std::wstring(L"mega");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'M');} + static std::wstring prefix() {return std::wstring(L"mega");} }; #endif #endif // giga -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else @@ -823,30 +653,24 @@ struct ratio_string : template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'G');} - static std::string long_name() {return std::string("giga");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'G');} + static std::string prefix() {return std::string("giga");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'G');} - static std::u16string long_name() {return std::u16string(u"giga");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'G');} + static std::u16string prefix() {return std::u16string(u"giga");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'G');} - static std::u32string long_name() {return std::u32string(U"giga");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'G');} + static std::u32string prefix() {return std::u32string(U"giga");} }; #endif @@ -855,56 +679,43 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'G');} - static std::wstring long_name() {return std::wstring(L"giga");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'G');} + static std::wstring prefix() {return std::wstring(L"giga");} }; #endif #endif // tera -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - +//template <> #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'T');} - static std::string long_name() {return std::string("tera");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'T');} + static std::string prefix() {return std::string("tera");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'T');} - static std::u16string long_name() {return std::u16string(u"tera");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'T');} + static std::u16string prefix() {return std::u16string(u"tera");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'T');} - static std::u32string long_name() {return std::u32string(U"tera");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'T');} + static std::u32string prefix() {return std::u32string(U"tera");} }; #endif @@ -913,57 +724,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'T');} - static std::wstring long_name() {return std::wstring(L"tera");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'T');} + static std::wstring prefix() {return std::wstring(L"tera");} }; #endif #endif // peta -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'P');} - static std::string long_name() {return std::string("peta");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'P');} + static std::string prefix() {return std::string("peta");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'P');} - static std::u16string long_name() {return std::u16string(u"peta");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'P');} + static std::u16string prefix() {return std::u16string(u"peta");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'P');} - static std::u32string long_name() {return std::u32string(U"peta");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'P');} + static std::u32string prefix() {return std::u32string(U"peta");} }; #endif @@ -972,56 +768,42 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'P');} - static std::wstring long_name() {return std::wstring(L"peta");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'P');} + static std::wstring prefix() {return std::wstring(L"peta");} }; #endif #endif // exa -template <> -struct ratio_string_is_localizable : true_type {}; - -template <> -struct ratio_string_id : integral_constant {}; - #ifdef BOOST_RATIO_HAS_STATIC_STRING template -struct ratio_string : - ratio_detail::ratio_string_static +struct ratio_string : + ratio_detail::ratio_string_static {}; #else template <> struct ratio_string { - static std::string short_name() {return std::string(1, 'E');} - static std::string long_name() {return std::string("exa");} - static std::string symbol() {return short_name();} - static std::string prefix() {return long_name();} + static std::string symbol() {return std::string(1, 'E');} + static std::string prefix() {return std::string("exa");} }; -#if BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined BOOST_RATIO_HAS_UNICODE_SUPPORT template <> struct ratio_string { - static std::u16string short_name() {return std::u16string(1, u'E');} - static std::u16string long_name() {return std::u16string(u"exa");} - static std::u16string symbol() {return short_name();} - static std::u16string prefix() {return long_name();} + static std::u16string symbol() {return std::u16string(1, u'E');} + static std::u16string prefix() {return std::u16string(u"exa");} }; template <> struct ratio_string { - static std::u32string short_name() {return std::u32string(1, U'E');} - static std::u32string long_name() {return std::u32string(U"exa");} - static std::u32string symbol() {return short_name();} - static std::u32string prefix() {return long_name();} + static std::u32string symbol() {return std::u32string(1, U'E');} + static std::u32string prefix() {return std::u32string(U"exa");} }; #endif @@ -1030,14 +812,13 @@ struct ratio_string template <> struct ratio_string { - static std::wstring short_name() {return std::wstring(1, L'E');} - static std::wstring long_name() {return std::wstring(L"exa");} - static std::wstring symbol() {return short_name();} - static std::wstring prefix() {return long_name();} + static std::wstring symbol() {return std::wstring(1, L'E');} + static std::wstring prefix() {return std::wstring(L"exa");} }; #endif #endif } +#endif // BOOST_RATIO_PROVIDES_DEPRECATED_FEATURES_SINCE_V2_0_0 #endif // BOOST_RATIO_RATIO_IO_HPP diff --git a/3party/boost/boost/ratio/ratio_static_string.hpp b/3party/boost/boost/ratio/ratio_static_string.hpp index 48dbd7c5fc..95bf308688 100644 --- a/3party/boost/boost/ratio/ratio_static_string.hpp +++ b/3party/boost/boost/ratio/ratio_static_string.hpp @@ -5,7 +5,7 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt). // -// This code was adapted by Vicente from Howard Hinnant's experimental work +// This code was adapted by Vicente from Howard Hinnant's experimental work // on chrono i/o under lvm/libc++ to Boost #ifndef BOOST_RATIO_RATIO_STATIC_STRING_HPP @@ -38,14 +38,14 @@ struct ratio_static_string //#include -#if defined(BOOST_NO_UNICODE_LITERALS) || defined(BOOST_NO_CHAR16_T) || defined(BOOST_NO_CHAR32_T) -//~ #define BOOST_RATIO_HAS_UNICODE_SUPPORT +#if defined(BOOST_NO_CXX11_UNICODE_LITERALS) || defined(BOOST_NO_CXX11_CHAR16_T) || defined(BOOST_NO_CXX11_CHAR32_T) +//~ #define BOOST_RATIO_HAS_UNICODE_SUPPORT #else #define BOOST_RATIO_HAS_UNICODE_SUPPORT 1 #endif namespace boost { - + template struct ratio_static_string; diff --git a/3party/boost/boost/signals/connection.hpp b/3party/boost/boost/signals/connection.hpp index 48493aabf9..1ede6be7a1 100644 --- a/3party/boost/boost/signals/connection.hpp +++ b/3party/boost/boost/signals/connection.hpp @@ -132,7 +132,7 @@ namespace boost { connection release(); - inline void swap(scoped_connection&); + void swap(scoped_connection&); scoped_connection& operator=(const connection&); scoped_connection& operator=(const scoped_connection&); diff --git a/3party/boost/boost/signals/detail/named_slot_map.hpp b/3party/boost/boost/signals/detail/named_slot_map.hpp index 763013fde1..88625faea2 100644 --- a/3party/boost/boost/signals/detail/named_slot_map.hpp +++ b/3party/boost/boost/signals/detail/named_slot_map.hpp @@ -127,7 +127,7 @@ public: || slot_ == other.slot_)); } -#if BOOST_WORKAROUND(_MSC_VER, <= 1600) +#if BOOST_WORKAROUND(_MSC_VER, <= 1700) void decrement(); void advance(difference_type); #endif diff --git a/3party/boost/boost/spirit/home/support/info.hpp b/3party/boost/boost/spirit/home/support/info.hpp index 07018886b5..ff523ab972 100644 --- a/3party/boost/boost/spirit/home/support/info.hpp +++ b/3party/boost/boost/spirit/home/support/info.hpp @@ -36,7 +36,7 @@ namespace boost { namespace spirit , utf8_string , recursive_wrapper , recursive_wrapper > - , std::list + , recursive_wrapper > > value_type; diff --git a/3party/boost/boost/thread/detail/config.hpp b/3party/boost/boost/thread/detail/config.hpp index d9270df8af..87bad341db 100644 --- a/3party/boost/boost/thread/detail/config.hpp +++ b/3party/boost/boost/thread/detail/config.hpp @@ -8,29 +8,40 @@ #ifndef BOOST_THREAD_CONFIG_WEK01032003_HPP #define BOOST_THREAD_CONFIG_WEK01032003_HPP +// Force SIG_ATOMIC_MAX to be defined +//#ifndef __STDC_LIMIT_MACROS +//#define __STDC_LIMIT_MACROS +//#endif + #include #include +#ifdef BOOST_NO_NOEXCEPT +# define BOOST_THREAD_NOEXCEPT_OR_THROW throw() +#else +# define BOOST_THREAD_NOEXCEPT_OR_THROW noexcept +#endif + // This compiler doesn't support Boost.Chrono -#if defined __IBMCPP__ && (__IBMCPP__ < 1100) +#if defined __IBMCPP__ && (__IBMCPP__ < 1100) && ! defined BOOST_THREAD_DONT_USE_CHRONO #define BOOST_THREAD_DONT_USE_CHRONO #endif // This compiler doesn't support Boost.Move -#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) +#if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) && ! defined BOOST_THREAD_DONT_USE_MOVE #define BOOST_THREAD_DONT_USE_MOVE #endif // This compiler doesn't support Boost.Container Allocators files -#if defined __SUNPRO_CC +#if defined __SUNPRO_CC && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS #endif -#if defined _WIN32_WCE && _WIN32_WCE==0x501 +#if defined _WIN32_WCE && _WIN32_WCE==0x501 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID +#if ! defined BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID && ! defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID #define BOOST_THREAD_PROVIDES_BASIC_THREAD_ID #endif @@ -43,13 +54,8 @@ #endif #endif -// Uses Boost.System by default if not stated the opposite defining BOOST_THREAD_DONT_USE_SYSTEM -#if ! defined BOOST_THREAD_DONT_USE_SYSTEM -#define BOOST_THREAD_USES_SYSTEM -#endif - -// Uses Boost.Chrono by default if not stated the opposite defining BOOST_THREAD_DONT_USE_CHRONO or BOOST_THREAD_DONT_USE_SYSTEM -#if ! defined BOOST_THREAD_DONT_USE_CHRONO && ! defined BOOST_THREAD_DONT_USE_SYSTEM +// Uses Boost.Chrono by default if not stated the opposite defining BOOST_THREAD_DONT_USE_CHRONO +#if ! defined BOOST_THREAD_DONT_USE_CHRONO && ! defined BOOST_THREAD_USES_CHRONO #define BOOST_THREAD_USES_CHRONO #endif @@ -61,15 +67,8 @@ #endif -// Uses Boost.Move by default if not stated the opposite defining BOOST_THREAD_DONT_USE_MOVE -#if ! defined BOOST_THREAD_DONT_USE_MOVE -#if ! defined BOOST_THREAD_USES_MOVE -//#define BOOST_THREAD_USES_MOVE -#endif -#endif - #if BOOST_THREAD_VERSION==2 -#if ! defined BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY +#if ! defined BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY && ! defined BOOST_THREAD_PROMISE_LAZY #define BOOST_THREAD_PROMISE_LAZY #endif #if ! defined BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 @@ -78,49 +77,59 @@ #endif #if BOOST_THREAD_VERSION==3 -#if ! defined BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11 +#if ! defined BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11 \ + && ! defined BOOST_THREAD_PROVIDES_ONCE_CXX11 #define BOOST_THREAD_PROVIDES_ONCE_CXX11 #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE +#if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE \ + && ! defined BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE #define BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE +#if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE \ + && ! defined BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE #define BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE +#if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE \ + && ! defined BOOST_THREAD_PROVIDES_FUTURE #define BOOST_THREAD_PROVIDES_FUTURE #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS +#if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS \ + && ! defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS #define BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSIONS +#if ! defined BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSIONS \ + && ! defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS #define BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION +#if ! defined BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION \ + && ! defined BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION #define BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION #endif -#if ! defined BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN +#if ! defined BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN \ + && ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN #endif -#if ! defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 +#if ! defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 \ + && ! defined BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_ #define BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 #endif -#if ! defined BOOST_THREAD_DONT_USE_MOVE -#if ! defined BOOST_THREAD_USES_MOVE +#if ! defined BOOST_THREAD_DONT_USE_MOVE \ + && ! defined BOOST_THREAD_USES_MOVE #define BOOST_THREAD_USES_MOVE #endif -#endif #endif // BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN is defined if BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS -#if defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS +#if defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS \ +&& ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN #endif // BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.52 // BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.55 -#if ! defined BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 +#if ! defined BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 \ +&& ! defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 #define BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 #endif @@ -135,7 +144,7 @@ // provided for backwards compatibility, since this // macro was used for several releases by mistake. -#if defined(BOOST_THREAD_DYN_DLL) +#if defined(BOOST_THREAD_DYN_DLL) && ! defined BOOST_THREAD_DYN_LINK # define BOOST_THREAD_DYN_LINK #endif diff --git a/3party/boost/boost/thread/detail/delete.hpp b/3party/boost/boost/thread/detail/delete.hpp index 9e56d4429e..30e7c932ec 100644 --- a/3party/boost/boost/thread/detail/delete.hpp +++ b/3party/boost/boost/thread/detail/delete.hpp @@ -15,14 +15,14 @@ * BOOST_THREAD_DELETE_COPY_ASSIGN deletes the copy assignment when the compiler supports it or * makes it private. */ -#ifndef BOOST_NO_DELETED_FUNCTIONS +#ifndef BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_THREAD_DELETE_COPY_CTOR(CLASS) \ CLASS(CLASS const&) = delete; \ #define BOOST_THREAD_DELETE_COPY_ASSIGN(CLASS) \ CLASS& operator=(CLASS const&) = delete; -#else // BOOST_NO_DELETED_FUNCTIONS +#else // BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_THREAD_DELETE_COPY_CTOR(CLASS) \ private: \ CLASS(CLASS&); \ @@ -32,7 +32,7 @@ private: \ CLASS& operator=(CLASS&); \ public: -#endif // BOOST_NO_DELETED_FUNCTIONS +#endif // BOOST_NO_CXX11_DELETED_FUNCTIONS /** * BOOST_THREAD_NO_COPYABLE deletes the copy constructor and assignment when the compiler supports it or diff --git a/3party/boost/boost/thread/detail/memory.hpp b/3party/boost/boost/thread/detail/memory.hpp index 7d47efc781..3c1692d0e1 100644 --- a/3party/boost/boost/thread/detail/memory.hpp +++ b/3party/boost/boost/thread/detail/memory.hpp @@ -11,9 +11,15 @@ #ifndef BOOST_THREAD_DETAIL_MEMORY_HPP #define BOOST_THREAD_DETAIL_MEMORY_HPP +#include #include #include -#include +#include +#include +#include +#include +#include +#include namespace boost { @@ -27,7 +33,7 @@ namespace boost typedef typename alloc_traits::pointer pointer; typedef typename alloc_traits::size_type size_type; private: - _Alloc& alloc_; + _Alloc alloc_; size_type s_; public: allocator_destructor(_Alloc& a, size_type s)BOOST_NOEXCEPT @@ -35,6 +41,7 @@ namespace boost {} void operator()(pointer p)BOOST_NOEXCEPT { + alloc_traits::destroy(alloc_, p); alloc_traits::deallocate(alloc_, p, s_); } }; @@ -48,6 +55,101 @@ namespace boost { }; + template + struct pointer_traits + { + typedef Ptr pointer; +// typedef
element_type; +// typedef
difference_type; + +// template using rebind =
; +// +// static pointer pointer_to(
); + }; + + template + struct pointer_traits + { + typedef T* pointer; + typedef T element_type; + typedef ptrdiff_t difference_type; + +// template using rebind = U*; +// +// static pointer pointer_to(
) noexcept; + }; + + + namespace thread_detail { + template ::element_type>::type, + typename remove_cv::element_type>::type + >::value + > + struct same_or_less_cv_qualified_imp + : is_convertible<_Ptr1, _Ptr2> {}; + + template + struct same_or_less_cv_qualified_imp<_Ptr1, _Ptr2, false> + : false_type {}; + + template ::value && + !is_pointer<_Ptr1>::value> + struct same_or_less_cv_qualified + : same_or_less_cv_qualified_imp<_Ptr1, _Ptr2> {}; + + template + struct same_or_less_cv_qualified<_Ptr1, _Ptr2, true> + : false_type {}; + + } + template + struct BOOST_SYMBOL_VISIBLE default_delete + { + #ifndef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS + BOOST_SYMBOL_VISIBLE + BOOST_CONSTEXPR default_delete() = default; + #else + BOOST_SYMBOL_VISIBLE + BOOST_CONSTEXPR default_delete() BOOST_NOEXCEPT {} + #endif + template + BOOST_SYMBOL_VISIBLE + default_delete(const default_delete&, + typename enable_if >::type* = 0) BOOST_NOEXCEPT {} + BOOST_SYMBOL_VISIBLE + void operator() (T* ptr) const BOOST_NOEXCEPT + { + BOOST_STATIC_ASSERT_MSG(sizeof(T) > 0, "default_delete can not delete incomplete type"); + delete ptr; + } + }; + + template + struct BOOST_SYMBOL_VISIBLE default_delete + { + public: + #ifndef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS + BOOST_SYMBOL_VISIBLE + BOOST_CONSTEXPR default_delete() = default; + #else + BOOST_SYMBOL_VISIBLE + BOOST_CONSTEXPR default_delete() BOOST_NOEXCEPT {} + #endif + template + BOOST_SYMBOL_VISIBLE + default_delete(const default_delete&, + typename enable_if >::type* = 0) BOOST_NOEXCEPT {} + template + BOOST_SYMBOL_VISIBLE + void operator() (U* ptr, + typename enable_if >::type* = 0) const BOOST_NOEXCEPT + { + BOOST_STATIC_ASSERT_MSG(sizeof(T) > 0, "default_delete can not delete incomplete type"); + delete [] ptr; + } + }; + } // namespace boost diff --git a/3party/boost/boost/thread/detail/move.hpp b/3party/boost/boost/thread/detail/move.hpp index 748b8dc241..f2665e6cec 100644 --- a/3party/boost/boost/thread/detail/move.hpp +++ b/3party/boost/boost/thread/detail/move.hpp @@ -65,7 +65,7 @@ namespace boost } } -#if ! defined BOOST_NO_RVALUE_REFERENCES +#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_THREAD_RV_REF(TYPE) BOOST_RV_REF(TYPE) #define BOOST_THREAD_RV_REF_BEG BOOST_RV_REF_BEG @@ -84,7 +84,7 @@ namespace boost {}; \ } -#elif ! defined BOOST_NO_RVALUE_REFERENCES && defined BOOST_MSVC +#elif ! defined BOOST_NO_CXX11_RVALUE_REFERENCES && defined BOOST_MSVC #define BOOST_THREAD_RV_REF(TYPE) BOOST_RV_REF(TYPE) #define BOOST_THREAD_RV_REF_BEG BOOST_RV_REF_BEG @@ -176,7 +176,7 @@ namespace detail #endif -#if ! defined BOOST_NO_RVALUE_REFERENCES +#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_THREAD_MOVABLE(TYPE) @@ -227,7 +227,7 @@ namespace detail -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES namespace boost { namespace thread_detail { diff --git a/3party/boost/boost/thread/detail/thread.hpp b/3party/boost/boost/thread/detail/thread.hpp index 3c71b53cf7..2590f45cee 100644 --- a/3party/boost/boost/thread/detail/thread.hpp +++ b/3party/boost/boost/thread/detail/thread.hpp @@ -23,6 +23,8 @@ #include #include #include +//#include +//#include #include #include #include @@ -52,7 +54,7 @@ namespace boost { public: BOOST_THREAD_NO_COPYABLE(thread_data) -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES thread_data(BOOST_THREAD_RV_REF(F) f_): f(boost::forward(f_)) {} @@ -69,10 +71,13 @@ namespace boost f(f_) {} #endif + //thread_data() {} + void run() { f(); } + private: F f; }; @@ -131,7 +136,7 @@ namespace boost detail::thread_data_ptr get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const; -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES template static inline detail::thread_data_ptr make_thread_info(BOOST_THREAD_RV_REF(F) f) { @@ -174,7 +179,7 @@ namespace boost detach(); #endif } -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES template < class F > @@ -364,11 +369,17 @@ namespace boost #endif #if defined(BOOST_THREAD_PLATFORM_WIN32) bool timed_join(const system_time& abs_time); - -#ifdef BOOST_THREAD_USES_CHRONO - bool try_join_until(const chrono::time_point& tp); -#endif + private: + bool do_try_join_until(uintmax_t milli); public: +#ifdef BOOST_THREAD_USES_CHRONO + bool try_join_until(const chrono::time_point& tp) + { + chrono::milliseconds rel_time= chrono::ceil(tp-chrono::system_clock::now()); + return do_try_join_until(rel_time.count()); + } +#endif + #else bool timed_join(const system_time& abs_time) @@ -400,7 +411,7 @@ namespace boost return timed_join(get_system_time()+rel_time); } - void detach() BOOST_NOEXCEPT; + void detach(); static unsigned hardware_concurrency() BOOST_NOEXCEPT; @@ -434,7 +445,7 @@ namespace boost return lhs.swap(rhs); } -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES inline thread&& move(thread& t) BOOST_NOEXCEPT { return static_cast(t); diff --git a/3party/boost/boost/thread/future.hpp b/3party/boost/boost/thread/future.hpp index 8cad994de5..6bf5cf6ae0 100644 --- a/3party/boost/boost/thread/future.hpp +++ b/3party/boost/boost/thread/future.hpp @@ -50,7 +50,7 @@ #endif #include -//#include +#include #if defined BOOST_THREAD_PROVIDES_FUTURE #define BOOST_THREAD_FUTURE future @@ -77,7 +77,7 @@ namespace boost template <> struct BOOST_SYMBOL_VISIBLE is_error_code_enum : public true_type {}; - #ifdef BOOST_NO_SCOPED_ENUMS + #ifdef BOOST_NO_CXX11_SCOPED_ENUMS template <> struct BOOST_SYMBOL_VISIBLE is_error_code_enum : public true_type { }; #endif @@ -102,20 +102,20 @@ namespace boost BOOST_SCOPED_ENUM_DECLARE_END(future_status) BOOST_THREAD_DECL - const system::error_category& future_category(); + const system::error_category& future_category() BOOST_NOEXCEPT; namespace system { - inline BOOST_THREAD_DECL + inline error_code - make_error_code(future_errc e) + make_error_code(future_errc e) //BOOST_NOEXCEPT { return error_code(underlying_cast(e), boost::future_category()); } - inline BOOST_THREAD_DECL + inline error_condition - make_error_condition(future_errc e) + make_error_condition(future_errc e) //BOOST_NOEXCEPT { return error_condition(underlying_cast(e), future_category()); } @@ -136,15 +136,18 @@ namespace boost { return ec_; } + const char* what() const BOOST_THREAD_NOEXCEPT_OR_THROW + { + return code().message().c_str(); + } - //virtual ~future_error() BOOST_NOEXCEPT; }; class BOOST_SYMBOL_VISIBLE future_uninitialized: public future_error { public: - future_uninitialized(): + future_uninitialized() : future_error(system::make_error_code(future_errc::no_state)) {} }; @@ -179,7 +182,6 @@ namespace boost public: task_already_started(): future_error(system::make_error_code(future_errc::promise_already_satisfied)) - //std::logic_error("Task already started") {} }; @@ -189,7 +191,6 @@ namespace boost public: task_moved(): future_error(system::make_error_code(future_errc::no_state)) - //std::logic_error("Task moved") {} }; @@ -199,7 +200,6 @@ namespace boost public: promise_moved(): future_error(system::make_error_code(future_errc::no_state)) - //std::logic_error("Promise moved") {} }; @@ -374,7 +374,7 @@ namespace boost struct future_traits { typedef boost::scoped_ptr storage_type; -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES typedef T const& source_reference_type; struct dummy; typedef typename boost::mpl::if_,dummy&,BOOST_THREAD_RV_REF(T)>::type rvalue_source_type; @@ -576,7 +576,7 @@ namespace boost class future_waiter { struct registered_waiter; - typedef std::vector::size_type count_type; + typedef std::vector::size_type count_type; struct registered_waiter { @@ -594,15 +594,20 @@ namespace boost struct all_futures_lock { - count_type count; +#ifdef _MANAGED + typedef std::ptrdiff_t count_type_portable; +#else + typedef count_type count_type_portable; +#endif + count_type_portable count; boost::scoped_array > locks; all_futures_lock(std::vector& futures): count(futures.size()),locks(new boost::unique_lock[count]) { - for(count_type i=0;i(futures[i].future_->mutex).move(); #else locks[i]=boost::unique_lock(futures[i].future_->mutex); @@ -617,7 +622,7 @@ namespace boost void unlock() { - for(count_type i=0;imark_exceptional_finish_internal(p); } + // setting the result with deferred notification + //void set_value_at_thread_exit(const R& r); // NOT YET IMPLEMENTED + //void set_value_at_thread_exit(see below); // NOT YET IMPLEMENTED + //void set_exception_at_thread_exit(exception_ptr p); // NOT YET IMPLEMENTED + template void set_wait_callback(F f) { @@ -1411,6 +1421,8 @@ namespace boost }; + + template struct task_object: task_base @@ -1422,7 +1434,7 @@ namespace boost task_object(F const& f_): f(f_) {} -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES task_object(BOOST_THREAD_RV_REF(F) f_): f(boost::forward(f_)) {} @@ -1448,6 +1460,34 @@ namespace boost } }; + template + struct task_object: + task_base + { + private: + task_object(task_object&); + public: + R (*f)(); + task_object(R (*f_)()): + f(f_) + {} + void do_run() + { + try + { + this->mark_finished_with_result(f()); + } + catch(thread_interrupted& ) + { + this->mark_interrupted_finish(); + } + catch(...) + { + this->mark_exceptional_finish(); + } + } + }; + template struct task_object: task_base @@ -1459,7 +1499,7 @@ namespace boost task_object(F const& f_): f(f_) {} -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES task_object(BOOST_THREAD_RV_REF(F) f_): f(boost::forward(f_)) {} @@ -1487,6 +1527,35 @@ namespace boost } }; + template<> + struct task_object: + task_base + { + private: + task_object(task_object&); + public: + void (*f)(); + task_object(void (*f_)()): + f(f_) + {} + void do_run() + { + try + { + f(); + this->mark_finished_with_result(); + } + catch(thread_interrupted& ) + { + this->mark_interrupted_finish(); + } + catch(...) + { + this->mark_exceptional_finish(); + } + } + }; + } template @@ -1509,7 +1578,7 @@ namespace boost explicit packaged_task(R(*f)()): task(new detail::task_object(f)),future_obtained(false) {} -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES template explicit packaged_task(BOOST_THREAD_RV_REF(F) f): task(new detail::task_object(f), D(a2, 1) ); future_obtained = false; } -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES template packaged_task(boost::allocator_arg_t, Allocator a, BOOST_THREAD_RV_REF(F) f) { @@ -1572,7 +1641,7 @@ namespace boost task = task_ptr(::new(a2.allocate(1)) detail::task_object(boost::move(f)), D(a2, 1) ); future_obtained = false; } -#endif //BOOST_NO_RVALUE_REFERENCES +#endif //BOOST_NO_CXX11_RVALUE_REFERENCES #endif // BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS ~packaged_task() @@ -1665,17 +1734,80 @@ namespace boost BOOST_THREAD_DCL_MOVABLE_BEG(T) packaged_task BOOST_THREAD_DCL_MOVABLE_END + + template + BOOST_THREAD_FUTURE + async(launch policy, R(*f)()) + { + if (int(policy) & int(launch::async)) + { + packaged_task pt( f ); + + BOOST_THREAD_FUTURE ret = pt.get_future(); + boost::thread( boost::move(pt) ).detach(); + return ::boost::move(ret); + } + else if (int(policy) & int(launch::deferred)) + { + packaged_task pt( f ); + + BOOST_THREAD_FUTURE ret = pt.get_future(); + return ::boost::move(ret); + } else { + BOOST_THREAD_FUTURE ret; + return ::boost::move(ret); + } + } + + template + BOOST_THREAD_FUTURE + async(R(*f)()) + { + return async(launch::any, f); + } +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES + template + BOOST_THREAD_FUTURE::type()>::type> + async(launch policy, BOOST_THREAD_FWD_REF(F) f) + { + typedef typename boost::result_of::type()>::type R; + if (int(policy) & int(launch::async)) + { + packaged_task pt( boost::forward(f) ); + + BOOST_THREAD_FUTURE ret = pt.get_future(); + boost::thread( boost::move(pt) ).detach(); + return ::boost::move(ret); + } + else if (int(policy) & int(launch::deferred)) + { + packaged_task pt( boost::forward(f) ); + + BOOST_THREAD_FUTURE ret = pt.get_future(); + return ::boost::move(ret); + } else { + BOOST_THREAD_FUTURE ret; + return ::boost::move(ret); + } + } + template + BOOST_THREAD_FUTURE::type> + async(BOOST_THREAD_RV_REF(F) f) + { + return async(launch::any, boost::forward(f)); + } +#else + // template -// BOOST_THREAD_FUTURE::type> -// async(launch policy, F f) +// BOOST_THREAD_FUTURE::type()>::type> +// async(launch policy, F const& f) // { -// typedef typename boost::result_of::type R; -// typedef BOOST_THREAD_FUTURE future; +// typedef typename boost::result_of::type()>::type R; // if (int(policy) & int(launch::async)) // { // packaged_task pt( f ); // -// BOOST_THREAD_FUTURE ret = pt.get_future(); +// BOOST_THREAD_FUTURE ret = pt.get_future(); // boost::thread( boost::move(pt) ).detach(); // return ::boost::move(ret); // } @@ -1683,19 +1815,52 @@ namespace boost // { // packaged_task pt( f ); // -// BOOST_THREAD_FUTURE ret = pt.get_future(); +// BOOST_THREAD_FUTURE ret = pt.get_future(); +// return ::boost::move(ret); +// } else { +// BOOST_THREAD_FUTURE ret; // return ::boost::move(ret); // } // } -// // template // BOOST_THREAD_FUTURE::type> -// async(F f) +// async(F const& f) // { // return async(launch::any, f); // } + template + BOOST_THREAD_FUTURE::type()>::type> + async(launch policy, BOOST_THREAD_FWD_REF(F) f) + { + typedef typename boost::result_of::type()>::type R; + if (int(policy) & int(launch::async)) + { + packaged_task pt( boost::forward(f) ); + BOOST_THREAD_FUTURE ret = pt.get_future(); + boost::thread( boost::move(pt) ).detach(); + return ::boost::move(ret); + } + else if (int(policy) & int(launch::deferred)) + { + packaged_task pt( boost::forward(f) ); + + BOOST_THREAD_FUTURE ret = pt.get_future(); + return ::boost::move(ret); + } else { + BOOST_THREAD_FUTURE ret; + return ::boost::move(ret); + } + } + template + BOOST_THREAD_FUTURE::type> + async(BOOST_THREAD_FWD_REF(F) f) + { + return async(launch::any, boost::forward(f)); + } + +#endif } diff --git a/3party/boost/boost/thread/locks.hpp b/3party/boost/boost/thread/locks.hpp index 5111d33e68..c11c2bd310 100644 --- a/3party/boost/boost/thread/locks.hpp +++ b/3party/boost/boost/thread/locks.hpp @@ -609,7 +609,7 @@ namespace boost is_locked=false; } -#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) +#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) typedef void (unique_lock::*bool_type)(); operator bool_type() const BOOST_NOEXCEPT { @@ -880,7 +880,7 @@ namespace boost is_locked=false; } -#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) +#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) typedef void (shared_lock::*bool_type)(); operator bool_type() const BOOST_NOEXCEPT { @@ -1140,7 +1140,7 @@ namespace boost return is_locked; } #endif -#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) +#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) typedef void (upgrade_lock::*bool_type)(); operator bool_type() const BOOST_NOEXCEPT { @@ -1224,7 +1224,7 @@ namespace boost exclusive.swap(other.exclusive); } -#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) +#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) typedef void (upgrade_to_unique_lock::*bool_type)(upgrade_to_unique_lock&); operator bool_type() const BOOST_NOEXCEPT { @@ -1275,7 +1275,7 @@ namespace boost try_lock_wrapper(Mutex& m_,try_to_lock_t): base(m_,try_to_lock) {} -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES try_lock_wrapper(BOOST_THREAD_RV_REF(try_lock_wrapper) other): base(::boost::move(other)) {} @@ -1325,7 +1325,7 @@ namespace boost return base::release(); } -#if defined(BOOST_NO_EXPLICIT_CONVERSION_OPERATORS) +#if defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) typedef typename base::bool_type bool_type; operator bool_type() const { diff --git a/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp b/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp index 4f4bd881d9..dbb389264a 100644 --- a/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp +++ b/3party/boost/boost/thread/pthread/condition_variable_fwd.hpp @@ -229,8 +229,11 @@ namespace boost unique_lock& lock, struct timespec const &timeout); }; + + BOOST_THREAD_DECL void notify_all_at_thread_exit(condition_variable& cond, unique_lock lk); } + #include #endif diff --git a/3party/boost/boost/thread/pthread/once.hpp b/3party/boost/boost/thread/pthread/once.hpp index 80aa09ee12..02c2732b54 100644 --- a/3party/boost/boost/thread/pthread/once.hpp +++ b/3party/boost/boost/thread/pthread/once.hpp @@ -12,19 +12,34 @@ #include -#include -#include #include -#include #include +#include +#include #include +#include +#include +#include + namespace boost { #define BOOST_ONCE_INITIAL_FLAG_VALUE 0 + namespace thread_detail + { +//#ifdef SIG_ATOMIC_MAX +// typedef sig_atomic_t uintmax_atomic_t; +// #define BOOST_THREAD_DETAIL_UINTMAX_ATOMIC_MAX_C SIG_ATOMIC_MAX +//#else + typedef unsigned long uintmax_atomic_t; + #define BOOST_THREAD_DETAIL_UINTMAX_ATOMIC_C2(value) value##ul + #define BOOST_THREAD_DETAIL_UINTMAX_ATOMIC_MAX_C BOOST_THREAD_DETAIL_UINTMAX_ATOMIC_C2(~0) +//#endif + } + #ifdef BOOST_THREAD_PROVIDES_ONCE_CXX11 struct once_flag @@ -34,7 +49,7 @@ namespace boost : epoch(BOOST_ONCE_INITIAL_FLAG_VALUE) {} private: - boost::uintmax_t epoch; + volatile thread_detail::uintmax_atomic_t epoch; template friend void call_once(once_flag& flag,Function f); @@ -44,7 +59,7 @@ namespace boost struct once_flag { - boost::uintmax_t epoch; + volatile thread_detail::uintmax_atomic_t epoch; }; #define BOOST_ONCE_INIT {BOOST_ONCE_INITIAL_FLAG_VALUE} @@ -52,8 +67,8 @@ namespace boost namespace detail { - BOOST_THREAD_DECL boost::uintmax_t& get_once_per_thread_epoch(); - BOOST_THREAD_DECL extern boost::uintmax_t once_global_epoch; + BOOST_THREAD_DECL thread_detail::uintmax_atomic_t& get_once_per_thread_epoch(); + BOOST_THREAD_DECL extern thread_detail::uintmax_atomic_t once_global_epoch; BOOST_THREAD_DECL extern pthread_mutex_t once_epoch_mutex; BOOST_THREAD_DECL extern pthread_cond_t once_epoch_cv; } @@ -63,10 +78,10 @@ namespace boost template void call_once(once_flag& flag,Function f) { - static boost::uintmax_t const uninitialized_flag=BOOST_ONCE_INITIAL_FLAG_VALUE; - static boost::uintmax_t const being_initialized=uninitialized_flag+1; - boost::uintmax_t const epoch=flag.epoch; - boost::uintmax_t& this_thread_epoch=detail::get_once_per_thread_epoch(); + static thread_detail::uintmax_atomic_t const uninitialized_flag=BOOST_ONCE_INITIAL_FLAG_VALUE; + static thread_detail::uintmax_atomic_t const being_initialized=uninitialized_flag+1; + thread_detail::uintmax_atomic_t const epoch=flag.epoch; + thread_detail::uintmax_atomic_t& this_thread_epoch=detail::get_once_per_thread_epoch(); if(epoch #include +#include +#include +#include + #include #include -#include #include -#include #include -#include -#include -#include #ifdef BOOST_THREAD_USES_CHRONO #include #endif + +#include +#include +#include + +#include +#include + #include namespace boost @@ -104,19 +111,28 @@ namespace boost bool interrupt_requested; pthread_mutex_t* cond_mutex; pthread_cond_t* current_cond; + typedef std::vector + //, hidden_allocator > + > notify_list_t; + notify_list_t notify; thread_data_base(): done(false),join_started(false),joined(false), thread_exit_callbacks(0), interrupt_enabled(true), interrupt_requested(false), - current_cond(0) + current_cond(0), + notify() {} virtual ~thread_data_base(); typedef pthread_t native_handle_type; virtual void run()=0; + void notify_all_at_thread_exit(condition_variable* cv, mutex* m) + { + notify.push_back(std::pair(cv, m)); + } }; BOOST_THREAD_DECL thread_data_base* get_current_thread_data(); @@ -177,7 +193,43 @@ namespace boost namespace this_thread { #ifdef BOOST_THREAD_USES_CHRONO - void BOOST_SYMBOL_VISIBLE sleep_for(const chrono::nanoseconds& ns); + inline + void BOOST_SYMBOL_VISIBLE sleep_for(const chrono::nanoseconds& ns) + { + using namespace chrono; + boost::detail::thread_data_base* const thread_info=boost::detail::get_current_thread_data(); + + if(thread_info) + { + unique_lock lk(thread_info->sleep_mutex); + while(cv_status::no_timeout==thread_info->sleep_condition.wait_for(lk,ns)) {} + } + else + { + if (ns >= nanoseconds::zero()) + { + + # if defined(BOOST_HAS_PTHREAD_DELAY_NP) + timespec ts; + ts.tv_sec = static_cast(duration_cast(ns).count()); + ts.tv_nsec = static_cast((ns - seconds(ts.tv_sec)).count()); + BOOST_VERIFY(!pthread_delay_np(&ts)); + # elif defined(BOOST_HAS_NANOSLEEP) + timespec ts; + ts.tv_sec = static_cast(duration_cast(ns).count()); + ts.tv_nsec = static_cast((ns - seconds(ts.tv_sec)).count()); + // nanosleep takes a timespec that is an offset, not + // an absolute time. + nanosleep(&ts, 0); + # else + mutex mx; + mutex::scoped_lock lock(mx); + condition_variable cond; + cond.wait_for(lock, ns); + # endif + } + } + } #endif void BOOST_THREAD_DECL yield() BOOST_NOEXCEPT; diff --git a/3party/boost/boost/thread/pthread/thread_heap_alloc.hpp b/3party/boost/boost/thread/pthread/thread_heap_alloc.hpp index 737c29858b..7828318f05 100644 --- a/3party/boost/boost/thread/pthread/thread_heap_alloc.hpp +++ b/3party/boost/boost/thread/pthread/thread_heap_alloc.hpp @@ -17,7 +17,7 @@ namespace boost return new T(); } -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES template inline T* heap_new(A1&& a1) { @@ -72,7 +72,7 @@ namespace boost { return heap_new_impl(a1); } - + template inline T* heap_new(A1 const& a1,A2 const& a2) { @@ -218,8 +218,8 @@ namespace boost { return heap_new_impl(a1,a2,a3,a4); } - -#endif + +#endif template inline void heap_delete(T* data) { diff --git a/3party/boost/boost/thread/win32/basic_recursive_mutex.hpp b/3party/boost/boost/thread/win32/basic_recursive_mutex.hpp index eb5ec8489d..e259121a97 100644 --- a/3party/boost/boost/thread/win32/basic_recursive_mutex.hpp +++ b/3party/boost/boost/thread/win32/basic_recursive_mutex.hpp @@ -42,7 +42,7 @@ namespace boost mutex.destroy(); } - bool try_lock() + bool try_lock() BOOST_NOEXCEPT { long const current_thread_id=win32::GetCurrentThreadId(); return try_recursive_lock(current_thread_id) || try_basic_lock(current_thread_id); @@ -93,7 +93,7 @@ namespace boost } private: - bool try_recursive_lock(long current_thread_id) + bool try_recursive_lock(long current_thread_id) BOOST_NOEXCEPT { if(::boost::detail::interlocked_read_acquire(&locking_thread_id)==current_thread_id) { @@ -103,7 +103,7 @@ namespace boost return false; } - bool try_basic_lock(long current_thread_id) + bool try_basic_lock(long current_thread_id) BOOST_NOEXCEPT { if(mutex.try_lock()) { diff --git a/3party/boost/boost/thread/win32/basic_timed_mutex.hpp b/3party/boost/boost/thread/win32/basic_timed_mutex.hpp index 30580e7c17..6a4307740a 100644 --- a/3party/boost/boost/thread/win32/basic_timed_mutex.hpp +++ b/3party/boost/boost/thread/win32/basic_timed_mutex.hpp @@ -58,7 +58,7 @@ namespace boost } - bool try_lock() + bool try_lock() BOOST_NOEXCEPT { return !win32::interlocked_bit_test_and_set(&active_count,lock_flag_bit); } diff --git a/3party/boost/boost/thread/win32/condition_variable.hpp b/3party/boost/boost/thread/win32/condition_variable.hpp index 63f830b186..4c893adde1 100644 --- a/3party/boost/boost/thread/win32/condition_variable.hpp +++ b/3party/boost/boost/thread/win32/condition_variable.hpp @@ -6,23 +6,27 @@ // (C) Copyright 2007-8 Anthony Williams // (C) Copyright 2011-2012 Vicente J. Botet Escriba -#include #include -#include -#include -#include -#include #include -#include +#include #include +#include #include -#include +#include +#include + +#include #include + #ifdef BOOST_THREAD_USES_CHRONO #include #include #endif +#include +#include +#include + #include namespace boost @@ -191,7 +195,10 @@ namespace boost ~entry_manager() { + if(! entry->is_notified()) + { entry->remove_waiter(); + } } list_entry* operator->() @@ -510,6 +517,7 @@ namespace boost #endif }; + BOOST_THREAD_DECL void notify_all_at_thread_exit(condition_variable& cond, unique_lock lk); } #include diff --git a/3party/boost/boost/thread/win32/interlocked_read.hpp b/3party/boost/boost/thread/win32/interlocked_read.hpp index 133fb6f975..4a96998522 100644 --- a/3party/boost/boost/thread/win32/interlocked_read.hpp +++ b/3party/boost/boost/thread/win32/interlocked_read.hpp @@ -3,13 +3,15 @@ // interlocked_read_win32.hpp // -// (C) Copyright 2005-8 Anthony Williams +// (C) Copyright 2005-8 Anthony Williams +// (C) Copyright 2012 Vicente J. Botet Escriba // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include +#include #include @@ -22,25 +24,25 @@ namespace boost { namespace detail { - inline long interlocked_read_acquire(long volatile* x) + inline long interlocked_read_acquire(long volatile* x) BOOST_NOEXCEPT { long const res=*x; _ReadWriteBarrier(); return res; } - inline void* interlocked_read_acquire(void* volatile* x) + inline void* interlocked_read_acquire(void* volatile* x) BOOST_NOEXCEPT { void* const res=*x; _ReadWriteBarrier(); return res; } - inline void interlocked_write_release(long volatile* x,long value) + inline void interlocked_write_release(long volatile* x,long value) BOOST_NOEXCEPT { _ReadWriteBarrier(); *x=value; } - inline void interlocked_write_release(void* volatile* x,void* value) + inline void interlocked_write_release(void* volatile* x,void* value) BOOST_NOEXCEPT { _ReadWriteBarrier(); *x=value; @@ -54,19 +56,19 @@ namespace boost { namespace detail { - inline long interlocked_read_acquire(long volatile* x) + inline long interlocked_read_acquire(long volatile* x) BOOST_NOEXCEPT { return BOOST_INTERLOCKED_COMPARE_EXCHANGE(x,0,0); } - inline void* interlocked_read_acquire(void* volatile* x) + inline void* interlocked_read_acquire(void* volatile* x) BOOST_NOEXCEPT { return BOOST_INTERLOCKED_COMPARE_EXCHANGE_POINTER(x,0,0); } - inline void interlocked_write_release(long volatile* x,long value) + inline void interlocked_write_release(long volatile* x,long value) BOOST_NOEXCEPT { BOOST_INTERLOCKED_EXCHANGE(x,value); } - inline void interlocked_write_release(void* volatile* x,void* value) + inline void interlocked_write_release(void* volatile* x,void* value) BOOST_NOEXCEPT { BOOST_INTERLOCKED_EXCHANGE_POINTER(x,value); } diff --git a/3party/boost/boost/thread/win32/thread_data.hpp b/3party/boost/boost/thread/win32/thread_data.hpp index 5af4fd3ed3..18fd7cbb53 100644 --- a/3party/boost/boost/thread/win32/thread_data.hpp +++ b/3party/boost/boost/thread/win32/thread_data.hpp @@ -7,17 +7,26 @@ // (C) Copyright 2011-2012 Vicente J. Botet Escriba #include -#include #include #include #include + +#include #ifdef BOOST_THREAD_USES_CHRONO #include #endif + +#include +#include +#include + #include namespace boost { + class condition_variable; + class mutex; + class thread_attributes { public: thread_attributes() BOOST_NOEXCEPT { @@ -58,32 +67,47 @@ namespace boost namespace detail { + struct tss_cleanup_function; struct thread_exit_callback_node; - struct tss_data_node; + struct tss_data_node + { + boost::shared_ptr func; + void* value; + + tss_data_node(boost::shared_ptr func_, + void* value_): + func(func_),value(value_) + {} + }; struct thread_data_base; void intrusive_ptr_add_ref(thread_data_base * p); void intrusive_ptr_release(thread_data_base * p); - struct BOOST_SYMBOL_VISIBLE thread_data_base + struct BOOST_THREAD_DECL thread_data_base { long count; detail::win32::handle_manager thread_handle; detail::win32::handle_manager interruption_handle; boost::detail::thread_exit_callback_node* thread_exit_callbacks; - boost::detail::tss_data_node* tss_data; + std::map tss_data; bool interruption_enabled; unsigned id; + typedef std::vector + //, hidden_allocator > + > notify_list_t; + notify_list_t notify; + thread_data_base(): count(0),thread_handle(detail::win32::invalid_handle_value), interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset)), - thread_exit_callbacks(0),tss_data(0), + thread_exit_callbacks(0),tss_data(), interruption_enabled(true), - id(0) - {} - virtual ~thread_data_base() + id(0), + notify() {} + virtual ~thread_data_base(); friend void intrusive_ptr_add_ref(thread_data_base * p) { @@ -106,6 +130,12 @@ namespace boost typedef detail::win32::handle native_handle_type; virtual void run()=0; + + void notify_all_at_thread_exit(condition_variable* cv, mutex* m) + { + notify.push_back(std::pair(cv, m)); + } + }; typedef boost::intrusive_ptr thread_data_ptr; diff --git a/3party/boost/boost/thread/win32/thread_heap_alloc.hpp b/3party/boost/boost/thread/win32/thread_heap_alloc.hpp index 843e46b532..9b6d3902bb 100644 --- a/3party/boost/boost/thread/win32/thread_heap_alloc.hpp +++ b/3party/boost/boost/thread/win32/thread_heap_alloc.hpp @@ -91,7 +91,7 @@ namespace boost #endif } -#ifndef BOOST_NO_RVALUE_REFERENCES +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES template inline T* heap_new(A1&& a1) { diff --git a/3party/boost/boost/thread/win32/thread_primitives.hpp b/3party/boost/boost/thread/win32/thread_primitives.hpp index 294e42ee9b..c0dba111b6 100644 --- a/3party/boost/boost/thread/win32/thread_primitives.hpp +++ b/3party/boost/boost/thread/win32/thread_primitives.hpp @@ -10,7 +10,7 @@ // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include #include @@ -341,7 +341,7 @@ namespace boost { inline bool interlocked_bit_test_and_set(long* x,long bit) { -#if 0 +#ifndef BOOST_INTEL_CXX_VERSION __asm { mov eax,bit; mov edx,x; @@ -351,7 +351,11 @@ namespace boost #else bool ret; __asm { - mov eax,bit; mov edx,x; lock bts [edx],eax; setc al; mov ret, al + mov eax,bit + mov edx,x + lock bts [edx],eax + setc al + mov ret, al }; return ret; @@ -360,7 +364,7 @@ namespace boost inline bool interlocked_bit_test_and_reset(long* x,long bit) { -#if 0 +#ifndef BOOST_INTEL_CXX_VERSION __asm { mov eax,bit; mov edx,x; @@ -368,11 +372,13 @@ namespace boost setc al; }; #else - - bool ret; __asm { - mov eax,bit; mov edx,x; lock btr [edx],eax; setc al; mov ret, al + mov eax,bit + mov edx,x + lock btr [edx],eax + setc al + mov ret, al }; return ret; diff --git a/3party/boost/boost/unordered/detail/allocate.hpp b/3party/boost/boost/unordered/detail/allocate.hpp index 5574c15855..b6f1c79642 100644 --- a/3party/boost/boost/unordered/detail/allocate.hpp +++ b/3party/boost/boost/unordered/detail/allocate.hpp @@ -167,347 +167,6 @@ BOOST_PP_REPEAT_FROM_TO(1, BOOST_UNORDERED_EMPLACE_LIMIT, BOOST_UNORDERED_EARGS, #endif - //////////////////////////////////////////////////////////////////////////// - // rvalue parameters when type can't be a BOOST_RV_REF(T) parameter - // e.g. for int - -#if !defined(BOOST_NO_RVALUE_REFERENCES) -# define BOOST_UNORDERED_RV_REF(T) BOOST_RV_REF(T) -#else - struct please_ignore_this_overload { - typedef please_ignore_this_overload type; - }; - - template - struct rv_ref_impl { - typedef BOOST_RV_REF(T) type; - }; - - template - struct rv_ref : - boost::detail::if_true< - boost::is_class::value - >::BOOST_NESTED_TEMPLATE then < - boost::unordered::detail::rv_ref_impl, - please_ignore_this_overload - >::type - {}; - -# define BOOST_UNORDERED_RV_REF(T) \ - typename boost::unordered::detail::rv_ref::type -#endif - - //////////////////////////////////////////////////////////////////////////// - // Construct from tuple - // - // Used for piecewise construction. - -#if !defined(__SUNPRO_CC) - -# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \ - template \ - void construct_from_tuple(T* ptr, namespace_ tuple<>) \ - { \ - new ((void*) ptr) T(); \ - } \ - \ - BOOST_PP_REPEAT_FROM_TO(1, n, \ - BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_) - -# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \ - template \ - void construct_from_tuple(T* ptr, \ - namespace_ tuple const& x) \ - { \ - new ((void*) ptr) T( \ - BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \ - ); \ - } - -# define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \ - namespace_ get(x) - -#else - - template struct length {}; - -# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \ - template \ - void construct_from_tuple_impl( \ - boost::unordered::detail::length<0>, T* ptr, \ - namespace_ tuple<>) \ - { \ - new ((void*) ptr) T(); \ - } \ - \ - BOOST_PP_REPEAT_FROM_TO(1, n, \ - BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_) - -# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \ - template \ - void construct_from_tuple_impl( \ - boost::unordered::detail::length, T* ptr, \ - namespace_ tuple const& x) \ - { \ - new ((void*) ptr) T( \ - BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \ - ); \ - } - -# define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \ - namespace_ get(x) - -#endif - -BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, boost::) - -#if !defined(__SUNPRO_CC) && !defined(BOOST_NO_CXX11_HDR_TUPLE) - BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, std::) -#endif - -#undef BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE -#undef BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL -#undef BOOST_UNORDERED_GET_TUPLE_ARG - -#if defined(__SUNPRO_CC) - - template - void construct_from_tuple(T* ptr, Tuple const& x) - { - construct_from_tuple_impl( - boost::unordered::detail::length< - boost::tuples::length::value>(), - ptr, x); - } - -#endif - - //////////////////////////////////////////////////////////////////////////// - // SFINAE traits for construction. - - // Decide which construction method to use for a three argument - // call. Note that this is difficult to do using overloads because - // the arguments are packed into 'emplace_args3'. - // - // The decision is made on the first argument. - - -#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) - template - struct emulation1 { - static choice1::type test(choice1, std::pair const&); - static choice2::type test(choice2, A const&); - static choice3::type test(choice3, convert_from_anything const&); - - enum { value = - sizeof(test(choose(), boost::unordered::detail::make())) == - sizeof(choice2::type) }; - }; -#endif - - template - struct check3_base { - static choice1::type test(choice1, - boost::unordered::piecewise_construct_t); - -#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) - static choice2::type test(choice2, A const&); -#endif - - static choice3::type test(choice3, ...); - - enum { value = - sizeof(test(choose(), boost::unordered::detail::make())) }; - }; - - template - struct piecewise3 { - enum { value = check3_base::value == sizeof(choice1::type) }; - }; - -#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) - template - struct emulation3 { - enum { value = check3_base::value == sizeof(choice2::type) }; - }; - -#endif - -#if !defined(BOOST_NO_VARIADIC_TEMPLATES) - - //////////////////////////////////////////////////////////////////////////// - // Construct from variadic parameters - - template - inline void construct_impl(T* address, BOOST_FWD_REF(Args)... args) - { - new((void*) address) T(boost::forward(args)...); - } - - template - inline typename enable_if, void>::type - construct_impl(std::pair* address, - BOOST_FWD_REF(A0), BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2) - { - boost::unordered::detail::construct_from_tuple( - boost::addressof(address->first), boost::forward(a1)); - boost::unordered::detail::construct_from_tuple( - boost::addressof(address->second), boost::forward(a2)); - } - -#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) - - template - inline typename enable_if, void>::type - construct_impl(std::pair* address, BOOST_FWD_REF(A0) a0) - { - new((void*) boost::addressof(address->first)) A(boost::forward(a0)); - new((void*) boost::addressof(address->second)) B(); - } - - template - inline typename enable_if, void>::type - construct_impl(std::pair* address, - BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2) - { - new((void*) boost::addressof(address->first)) A(boost::forward(a0)); - new((void*) boost::addressof(address->second)) B( - boost::forward(a1), - boost::forward(a2)); - } - - template - inline void construct_impl(std::pair* address, - BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, - BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(Args)... args) - { - new((void*) boost::addressof(address->first)) A(boost::forward(a0)); - - new((void*) boost::addressof(address->second)) B( - boost::forward(a1), - boost::forward(a2), - boost::forward(a3), - boost::forward(args)...); - } - -#endif // BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT - -#else // BOOST_NO_VARIADIC_TEMPLATES - -//////////////////////////////////////////////////////////////////////////////// -// Construct from emplace_args - -#define BOOST_UNORDERED_CONSTRUCT_IMPL(z, num_params, _) \ - template < \ - typename T, \ - BOOST_PP_ENUM_PARAMS_Z(z, num_params, typename A) \ - > \ - inline void construct_impl(T* address, \ - boost::unordered::detail::BOOST_PP_CAT(emplace_args,num_params) < \ - BOOST_PP_ENUM_PARAMS_Z(z, num_params, A) \ - > const& args) \ - { \ - new((void*) address) T( \ - BOOST_PP_ENUM_##z(num_params, BOOST_UNORDERED_CALL_FORWARD, \ - args.a)); \ - } - - template - inline void construct_impl(T* address, emplace_args1 const& args) - { - new((void*) address) T(boost::forward(args.a0)); - } - - template - inline void construct_impl(T* address, emplace_args2 const& args) - { - new((void*) address) T( - boost::forward(args.a0), - boost::forward(args.a1) - ); - } - - template - inline void construct_impl(T* address, emplace_args3 const& args) - { - new((void*) address) T( - boost::forward(args.a0), - boost::forward(args.a1), - boost::forward(args.a2) - ); - } - - BOOST_PP_REPEAT_FROM_TO(4, BOOST_UNORDERED_EMPLACE_LIMIT, - BOOST_UNORDERED_CONSTRUCT_IMPL, _) - -#undef BOOST_UNORDERED_CONSTRUCT_IMPL - - template - inline void construct_impl(std::pair* address, - boost::unordered::detail::emplace_args3 const& args, - typename enable_if, void*>::type = 0) - { - boost::unordered::detail::construct_from_tuple( - boost::addressof(address->first), args.a1); - boost::unordered::detail::construct_from_tuple( - boost::addressof(address->second), args.a2); - } - -#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) - - template - inline void construct_impl(std::pair* address, - boost::unordered::detail::emplace_args1 const& args, - typename enable_if, void*>::type = 0) - { - new((void*) boost::addressof(address->first)) A( - boost::forward(args.a0)); - new((void*) boost::addressof(address->second)) B(); - } - - template - inline void construct_impl(std::pair* address, - boost::unordered::detail::emplace_args3 const& args, - typename enable_if, void*>::type = 0) - { - new((void*) boost::addressof(address->first)) A( - boost::forward(args.a0)); - new((void*) boost::addressof(address->second)) B( - boost::forward(args.a1), - boost::forward(args.a2)); - } - -#define BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL(z, num_params, _) \ - template \ - inline void construct_impl(std::pair* address, \ - boost::unordered::detail::BOOST_PP_CAT(emplace_args, num_params) < \ - BOOST_PP_ENUM_PARAMS_Z(z, num_params, A) \ - > const& args) \ - { \ - new((void*) boost::addressof(address->first)) A( \ - boost::forward(args.a0)); \ - new((void*) boost::addressof(address->second)) B( \ - BOOST_PP_ENUM_##z(BOOST_PP_DEC(num_params), \ - BOOST_UNORDERED_CALL_FORWARD2, args.a)); \ - } - -#define BOOST_UNORDERED_CALL_FORWARD2(z, i, a) \ - BOOST_UNORDERED_CALL_FORWARD(z, BOOST_PP_INC(i), a) - - BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL(1, 2, _) - BOOST_PP_REPEAT_FROM_TO(4, BOOST_UNORDERED_EMPLACE_LIMIT, - BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL, _) - -#undef BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL -#undef BOOST_UNORDERED_CALL_FORWARD2 - -#endif // BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT -#endif // BOOST_NO_VARIADIC_TEMPLATES - }}} //////////////////////////////////////////////////////////////////////////////// @@ -1098,82 +757,418 @@ namespace boost { namespace unordered { namespace detail { #endif + +namespace boost { namespace unordered { namespace detail { + + //////////////////////////////////////////////////////////////////////////// + // call_construct + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +# if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT + + template + inline void call_construct(Alloc& alloc, T* address, + BOOST_FWD_REF(Args)... args) + { + boost::unordered::detail::allocator_traits::construct(alloc, + address, boost::forward(args)...); + } + + template + inline void destroy_value_impl(Alloc& alloc, T* x) { + boost::unordered::detail::allocator_traits::destroy(alloc, x); + } + + +# else + + template + inline void call_construct(Alloc&, T* address, + BOOST_FWD_REF(Args)... args) + { + new((void*) address) T(boost::forward(args)...); + } + + template + inline void destroy_value_impl(Alloc&, T* x) { + boost::unordered::detail::destroy(x); + } + + +# endif + +#else + + template + inline void destroy_value_impl(Alloc&, T* x) { + boost::unordered::detail::destroy(x); + } + +#endif + + //////////////////////////////////////////////////////////////////////////// + // Construct from tuple + // + // Used for piecewise construction. + +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + +# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \ + template \ + void construct_from_tuple(Alloc& alloc, T* ptr, namespace_ tuple<>) \ + { \ + boost::unordered::detail::call_construct(alloc, ptr); \ + } \ + \ + BOOST_PP_REPEAT_FROM_TO(1, n, \ + BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_) + +# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \ + template \ + void construct_from_tuple(Alloc& alloc, T* ptr, \ + namespace_ tuple const& x) \ + { \ + boost::unordered::detail::call_construct(alloc, ptr, \ + BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \ + ); \ + } + +# define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \ + namespace_ get(x) + +#elif !defined(__SUNPRO_CC) + +# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \ + template \ + void construct_from_tuple(Alloc&, T* ptr, namespace_ tuple<>) \ + { \ + new ((void*) ptr) T(); \ + } \ + \ + BOOST_PP_REPEAT_FROM_TO(1, n, \ + BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_) + +# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \ + template \ + void construct_from_tuple(Alloc&, T* ptr, \ + namespace_ tuple const& x) \ + { \ + new ((void*) ptr) T( \ + BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \ + ); \ + } + +# define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \ + namespace_ get(x) + +#else + + template struct length {}; + +# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(n, namespace_) \ + template \ + void construct_from_tuple_impl( \ + boost::unordered::detail::length<0>, Alloc&, T* ptr, \ + namespace_ tuple<>) \ + { \ + new ((void*) ptr) T(); \ + } \ + \ + BOOST_PP_REPEAT_FROM_TO(1, n, \ + BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL, namespace_) + +# define BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL(z, n, namespace_) \ + template \ + void construct_from_tuple_impl( \ + boost::unordered::detail::length, Alloc&, T* ptr, \ + namespace_ tuple const& x) \ + { \ + new ((void*) ptr) T( \ + BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_GET_TUPLE_ARG, namespace_) \ + ); \ + } + +# define BOOST_UNORDERED_GET_TUPLE_ARG(z, n, namespace_) \ + namespace_ get(x) + +#endif + +BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, boost::) + +#if !defined(__SUNPRO_CC) && !defined(BOOST_NO_CXX11_HDR_TUPLE) + BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE(10, std::) +#endif + +#undef BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE +#undef BOOST_UNORDERED_CONSTRUCT_FROM_TUPLE_IMPL +#undef BOOST_UNORDERED_GET_TUPLE_ARG + +#if defined(__SUNPRO_CC) + + template + void construct_from_tuple(Alloc& alloc, T* ptr, Tuple const& x) + { + construct_from_tuple_impl( + boost::unordered::detail::length< + boost::tuples::length::value>(), + alloc, ptr, x); + } + +#endif + + //////////////////////////////////////////////////////////////////////////// + // SFINAE traits for construction. + + // Decide which construction method to use for a three argument + // call. Note that this is difficult to do using overloads because + // the arguments are packed into 'emplace_args3'. + // + // The decision is made on the first argument. + + +#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) + template + struct emulation1 { + static choice1::type test(choice1, std::pair const&); + static choice2::type test(choice2, A const&); + static choice3::type test(choice3, convert_from_anything const&); + + enum { value = + sizeof(test(choose(), boost::unordered::detail::make())) == + sizeof(choice2::type) }; + }; +#endif + + template + struct check3_base { + static choice1::type test(choice1, + boost::unordered::piecewise_construct_t); + +#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) + static choice2::type test(choice2, A const&); +#endif + + static choice3::type test(choice3, ...); + + enum { value = + sizeof(test(choose(), boost::unordered::detail::make())) }; + }; + + template + struct piecewise3 { + enum { value = check3_base::value == sizeof(choice1::type) }; + }; + +#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) + template + struct emulation3 { + enum { value = check3_base::value == sizeof(choice2::type) }; + }; + +#endif + +// TODO: Full construct? +#if !defined(BOOST_NO_VARIADIC_TEMPLATES) + + //////////////////////////////////////////////////////////////////////////// + // Construct from variadic parameters + + template + inline void construct_value_impl(Alloc& alloc, T* address, + BOOST_FWD_REF(Args)... args) + { + boost::unordered::detail::call_construct(alloc, + address, boost::forward(args)...); + } + + template + inline typename enable_if, void>::type + construct_value_impl(Alloc& alloc, std::pair* address, + BOOST_FWD_REF(A0), BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2) + { + boost::unordered::detail::construct_from_tuple(alloc, + boost::addressof(address->first), boost::forward(a1)); + boost::unordered::detail::construct_from_tuple(alloc, + boost::addressof(address->second), boost::forward(a2)); + } + +#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) + + template + inline typename enable_if, void>::type + construct_value_impl(Alloc& alloc, std::pair* address, + BOOST_FWD_REF(A0) a0) + { + boost::unordered::detail::call_construct(alloc, + boost::addressof(address->first),boost::forward(a0)); + boost::unordered::detail::call_construct(alloc, + boost::addressof(address->second)); + } + + template + inline typename enable_if, void>::type + construct_value_impl(Alloc& alloc, std::pair* address, + BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2) + { + boost::unordered::detail::call_construct(alloc, + boost::addressof(address->first),boost::forward(a0)); + boost::unordered::detail::call_construct(alloc, + boost::addressof(address->second), + boost::forward(a1), + boost::forward(a2)); + } + + template + inline void construct_value_impl(Alloc& alloc, std::pair* address, + BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2, + BOOST_FWD_REF(A3) a3, BOOST_FWD_REF(Args)... args) + { + boost::unordered::detail::call_construct(alloc, + boost::addressof(address->first),boost::forward(a0)); + boost::unordered::detail::call_construct(alloc, + boost::addressof(address->second), + boost::forward(a1), + boost::forward(a2), + boost::forward(a3), + boost::forward(args)...); + } + +#endif // BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT +#else // BOOST_NO_VARIADIC_TEMPLATES + +//////////////////////////////////////////////////////////////////////////////// +// Construct from emplace_args + +#define BOOST_UNORDERED_CONSTRUCT_IMPL(z, num_params, _) \ + template < \ + typename Alloc, typename T, \ + BOOST_PP_ENUM_PARAMS_Z(z, num_params, typename A) \ + > \ + inline void construct_value_impl(Alloc&, T* address, \ + boost::unordered::detail::BOOST_PP_CAT(emplace_args,num_params) < \ + BOOST_PP_ENUM_PARAMS_Z(z, num_params, A) \ + > const& args) \ + { \ + new((void*) address) T( \ + BOOST_PP_ENUM_##z(num_params, BOOST_UNORDERED_CALL_FORWARD, \ + args.a)); \ + } + + template + inline void construct_value_impl(Alloc&, T* address, + emplace_args1 const& args) + { + new((void*) address) T(boost::forward(args.a0)); + } + + template + inline void construct_value_impl(Alloc&, T* address, + emplace_args2 const& args) + { + new((void*) address) T( + boost::forward(args.a0), + boost::forward(args.a1) + ); + } + + template + inline void construct_value_impl(Alloc&, T* address, + emplace_args3 const& args) + { + new((void*) address) T( + boost::forward(args.a0), + boost::forward(args.a1), + boost::forward(args.a2) + ); + } + + BOOST_PP_REPEAT_FROM_TO(4, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_CONSTRUCT_IMPL, _) + +#undef BOOST_UNORDERED_CONSTRUCT_IMPL + + template + inline void construct_value_impl(Alloc& alloc, std::pair* address, + boost::unordered::detail::emplace_args3 const& args, + typename enable_if, void*>::type = 0) + { + boost::unordered::detail::construct_from_tuple(alloc, + boost::addressof(address->first), args.a1); + boost::unordered::detail::construct_from_tuple(alloc, + boost::addressof(address->second), args.a2); + } + +#if defined(BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT) + + template + inline void construct_value_impl(Alloc&, std::pair* address, + boost::unordered::detail::emplace_args1 const& args, + typename enable_if, void*>::type = 0) + { + new((void*) boost::addressof(address->first)) A( + boost::forward(args.a0)); + new((void*) boost::addressof(address->second)) B(); + } + + template + inline void construct_value_impl(Alloc&, std::pair* address, + boost::unordered::detail::emplace_args3 const& args, + typename enable_if, void*>::type = 0) + { + new((void*) boost::addressof(address->first)) A( + boost::forward(args.a0)); + new((void*) boost::addressof(address->second)) B( + boost::forward(args.a1), + boost::forward(args.a2)); + } + +#define BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL(z, num_params, _) \ + template \ + inline void construct_value_impl(Alloc&, std::pair* address, \ + boost::unordered::detail::BOOST_PP_CAT(emplace_args, num_params) < \ + BOOST_PP_ENUM_PARAMS_Z(z, num_params, A) \ + > const& args) \ + { \ + new((void*) boost::addressof(address->first)) A( \ + boost::forward(args.a0)); \ + new((void*) boost::addressof(address->second)) B( \ + BOOST_PP_ENUM_##z(BOOST_PP_DEC(num_params), \ + BOOST_UNORDERED_CALL_FORWARD2, args.a)); \ + } + +#define BOOST_UNORDERED_CALL_FORWARD2(z, i, a) \ + BOOST_UNORDERED_CALL_FORWARD(z, BOOST_PP_INC(i), a) + + BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL(1, 2, _) + BOOST_PP_REPEAT_FROM_TO(4, BOOST_UNORDERED_EMPLACE_LIMIT, + BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL, _) + +#undef BOOST_UNORDERED_CONSTRUCT_PAIR_IMPL +#undef BOOST_UNORDERED_CALL_FORWARD2 + +#endif // BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT +#endif // BOOST_NO_VARIADIC_TEMPLATES + +}}} + //////////////////////////////////////////////////////////////////////////////// // // Some helper functions for allocating & constructing namespace boost { namespace unordered { namespace detail { - //////////////////////////////////////////////////////////////////////////// - // - // construct_node/destroy_node - // - // Construct a node using the best available method. - -#if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT - - template - inline void construct_node(Alloc& a, T* p, BOOST_UNORDERED_EMPLACE_ARGS) - { - boost::unordered::detail::allocator_traits::construct( - a, p, BOOST_UNORDERED_EMPLACE_FORWARD); - } - - template - inline void destroy_node(Alloc& a, T* p) - { - boost::unordered::detail::allocator_traits::destroy(a, p); - } - -#else - - template - struct value_construct - { - typedef BOOST_DEDUCED_TYPENAME AllocTraits::allocator_type allocator; - - allocator& alloc; - T* ptr; - - value_construct(allocator& a, T* p) : alloc(a), ptr(p) - { - AllocTraits::construct(alloc, ptr, T()); - } - - void release() - { - ptr = 0; - } - - ~value_construct() - { - if (ptr) AllocTraits::destroy(alloc, ptr); - } - - private: - value_construct(value_construct const&); - value_construct& operator=(value_construct const&); - }; - - template - inline void construct_node(Alloc& a, T* p, BOOST_UNORDERED_EMPLACE_ARGS) - { - value_construct, T> - construct_guard(a, p); - boost::unordered::detail::construct_impl( - p->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD); - construct_guard.release(); - } - - template - inline void destroy_node(Alloc& a, T* p) - { - boost::unordered::detail::destroy(p->value_ptr()); - boost::unordered::detail::allocator_traits::destroy(a, p); - } - -#endif - //////////////////////////////////////////////////////////////////////////// // // array_constructor diff --git a/3party/boost/boost/unordered/detail/buckets.hpp b/3party/boost/boost/unordered/detail/buckets.hpp index 85681a685c..def5c7c70d 100644 --- a/3party/boost/boost/unordered/detail/buckets.hpp +++ b/3party/boost/boost/unordered/detail/buckets.hpp @@ -20,171 +20,14 @@ #include #include -#if defined(BOOST_MSVC) -#pragma warning(push) -#pragma warning(disable:4127) // conditional expression is constant -#endif - namespace boost { namespace unordered { namespace detail { template struct table; template struct bucket; struct ptr_bucket; - template - struct buckets; template struct table_impl; template struct grouped_table_impl; - /////////////////////////////////////////////////////////////////// - // - // Node construction - - template - struct node_constructor - { - private: - - typedef NodeAlloc node_allocator; - typedef boost::unordered::detail::allocator_traits - node_allocator_traits; - typedef typename node_allocator_traits::value_type node; - typedef typename node_allocator_traits::pointer node_pointer; - typedef typename node::value_type value_type; - - node_allocator& alloc_; - node_pointer node_; - bool constructed_; - - public: - - node_constructor(node_allocator& n) : - alloc_(n), - node_(), - constructed_(false) - { - } - - ~node_constructor(); - - void construct_node(); - - template - void construct_value(BOOST_UNORDERED_EMPLACE_ARGS) - { - BOOST_ASSERT(node_ && !constructed_); - boost::unordered::detail::construct_node(alloc_, - boost::addressof(*node_), BOOST_UNORDERED_EMPLACE_FORWARD); - node_->init(static_cast(node_)); - constructed_ = true; - } - - template - void construct_value2(BOOST_FWD_REF(A0) a0) - { - BOOST_ASSERT(node_ && !constructed_); - - boost::unordered::detail::construct_node(alloc_, - boost::addressof(*node_), - BOOST_UNORDERED_EMPLACE_ARGS1(boost::forward(a0))); - - constructed_ = true; - node_->init(static_cast(node_)); - } - - value_type const& value() const { - BOOST_ASSERT(node_ && constructed_); - return node_->value(); - } - - node_pointer get() - { - return node_; - } - - // no throw - node_pointer release() - { - node_pointer p = node_; - node_ = node_pointer(); - return p; - } - - private: - node_constructor(node_constructor const&); - node_constructor& operator=(node_constructor const&); - }; - - template - node_constructor::~node_constructor() - { - if (node_) { - if (constructed_) { - boost::unordered::detail::destroy_node(alloc_, - boost::addressof(*node_)); - } - - node_allocator_traits::deallocate(alloc_, node_, 1); - } - } - - template - void node_constructor::construct_node() - { - if(!node_) { - constructed_ = false; - node_ = node_allocator_traits::allocate(alloc_, 1); - } - else if (constructed_) { - boost::unordered::detail::destroy_node(alloc_, - boost::addressof(*node_)); - constructed_ = false; - } - } - - /////////////////////////////////////////////////////////////////// - // - // Bucket - - template - struct bucket - { - typedef NodePointer previous_pointer; - previous_pointer next_; - - bucket() : next_() {} - - previous_pointer first_from_start() - { - return next_; - } - - enum { extra_node = true }; - }; - - struct ptr_bucket - { - typedef ptr_bucket* previous_pointer; - previous_pointer next_; - - ptr_bucket() : next_(0) {} - - previous_pointer first_from_start() - { - return this; - } - - enum { extra_node = false }; - }; - - template - struct node_base - { - typedef LinkPointer link_pointer; - link_pointer next_; - - node_base() : next_() {} - }; - }}} namespace boost { namespace unordered { namespace iterator_detail { @@ -340,8 +183,6 @@ namespace boost { namespace unordered { namespace iterator_detail { friend struct boost::unordered::iterator_detail::cl_iterator; template friend struct boost::unordered::detail::table; - template - friend struct boost::unordered::detail::buckets; template friend struct boost::unordered::detail::table_impl; template @@ -397,8 +238,6 @@ namespace boost { namespace unordered { namespace iterator_detail { #if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) template friend struct boost::unordered::detail::table; - template - friend struct boost::unordered::detail::buckets; template friend struct boost::unordered::detail::table_impl; template @@ -452,11 +291,285 @@ namespace boost { namespace unordered { namespace iterator_detail { namespace boost { namespace unordered { namespace detail { + /////////////////////////////////////////////////////////////////// + // + // Node construction + + template + struct node_constructor + { + private: + + typedef NodeAlloc node_allocator; + typedef boost::unordered::detail::allocator_traits + node_allocator_traits; + typedef typename node_allocator_traits::value_type node; + typedef typename node_allocator_traits::pointer node_pointer; + typedef typename node::value_type value_type; + + protected: + + node_allocator& alloc_; + + private: + + node_pointer node_; + bool node_constructed_; + bool value_constructed_; + + public: + + node_constructor(node_allocator& n) : + alloc_(n), + node_(), + node_constructed_(false), + value_constructed_(false) + { + } + + ~node_constructor(); + + void construct(); + + template + void construct_with_value(BOOST_UNORDERED_EMPLACE_ARGS) + { + construct(); + boost::unordered::detail::construct_value_impl( + alloc_, node_->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD); + value_constructed_ = true; + } + + template + void construct_with_value2(BOOST_FWD_REF(A0) a0) + { + construct(); + boost::unordered::detail::construct_value_impl( + alloc_, node_->value_ptr(), + BOOST_UNORDERED_EMPLACE_ARGS1(boost::forward(a0))); + value_constructed_ = true; + } + + value_type const& value() const { + BOOST_ASSERT(node_ && node_constructed_ && value_constructed_); + return node_->value(); + } + + // no throw + node_pointer release() + { + BOOST_ASSERT(node_ && node_constructed_); + node_pointer p = node_; + node_ = node_pointer(); + return p; + } + + private: + node_constructor(node_constructor const&); + node_constructor& operator=(node_constructor const&); + }; + + template + node_constructor::~node_constructor() + { + if (node_) { + if (value_constructed_) { + boost::unordered::detail::destroy_value_impl(alloc_, + node_->value_ptr()); + } + + if (node_constructed_) { + node_allocator_traits::destroy(alloc_, + boost::addressof(*node_)); + } + + node_allocator_traits::deallocate(alloc_, node_, 1); + } + } + + template + void node_constructor::construct() + { + if(!node_) { + node_constructed_ = false; + value_constructed_ = false; + + node_ = node_allocator_traits::allocate(alloc_, 1); + + node_allocator_traits::construct(alloc_, + boost::addressof(*node_), node()); + node_->init(static_cast(node_)); + node_constructed_ = true; + } + else { + BOOST_ASSERT(node_constructed_); + + if (value_constructed_) + { + boost::unordered::detail::destroy_value_impl(alloc_, + node_->value_ptr()); + value_constructed_ = false; + } + } + } + + /////////////////////////////////////////////////////////////////// + // + // Node Holder + // + // Temporary store for nodes. Deletes any that aren't used. + + template + struct node_holder : private node_constructor + { + private: + typedef node_constructor base; + + typedef NodeAlloc node_allocator; + typedef boost::unordered::detail::allocator_traits + node_allocator_traits; + typedef typename node_allocator_traits::value_type node; + typedef typename node_allocator_traits::pointer node_pointer; + typedef typename node::value_type value_type; + typedef typename node::link_pointer link_pointer; + typedef boost::unordered::iterator_detail:: + iterator iterator; + + node_pointer nodes_; + + public: + + template + explicit node_holder(Table& b) : + base(b.node_alloc()), + nodes_() + { + if (b.size_) { + typename Table::previous_pointer prev = b.get_previous_start(); + nodes_ = static_cast(prev->next_); + prev->next_ = link_pointer(); + b.size_ = 0; + } + } + + ~node_holder(); + + template + inline void assign_impl(T const& v) { + nodes_->value() = v; + } + + template + inline void assign_impl(std::pair const& v) { + const_cast(nodes_->value().first) = v.first; + nodes_->value().second = v.second; + } + + template + inline void move_assign_impl(T& v) { + nodes_->value() = boost::move(v); + } + + template + inline void move_assign_impl(std::pair& v) { + // TODO: Move key as well? + const_cast(nodes_->value().first) = + boost::move(const_cast(v.first)); + nodes_->value().second = boost::move(v.second); + } + + node_pointer copy_of(value_type const& v) + { + if (nodes_) { + assign_impl(v); + node_pointer p = nodes_; + nodes_ = static_cast(p->next_); + p->init(static_cast(p)); + p->next_ = link_pointer(); + return p; + } + else { + this->construct_with_value2(v); + return base::release(); + } + } + + node_pointer move_copy_of(value_type& v) + { + if (nodes_) { + move_assign_impl(v); + node_pointer p = nodes_; + nodes_ = static_cast(p->next_); + p->init(static_cast(p)); + p->next_ = link_pointer(); + return p; + } + else { + this->construct_with_value2(boost::move(v)); + return base::release(); + } + } + + iterator begin() const + { + return iterator(nodes_); + } + }; + + template + node_holder::~node_holder() + { + while (nodes_) { + node_pointer p = nodes_; + nodes_ = static_cast(p->next_); + + boost::unordered::detail::destroy_value_impl(this->alloc_, + p->value_ptr()); + node_allocator_traits::destroy(this->alloc_, boost::addressof(*p)); + node_allocator_traits::deallocate(this->alloc_, p, 1); + } + } + + /////////////////////////////////////////////////////////////////// + // + // Bucket + + template + struct bucket + { + typedef NodePointer previous_pointer; + previous_pointer next_; + + bucket() : next_() {} + + previous_pointer first_from_start() + { + return next_; + } + + enum { extra_node = true }; + }; + + struct ptr_bucket + { + typedef ptr_bucket* previous_pointer; + previous_pointer next_; + + ptr_bucket() : next_(0) {} + + previous_pointer first_from_start() + { + return this; + } + + enum { extra_node = false }; + }; + /////////////////////////////////////////////////////////////////// // // Hash Policy // - // Don't really want buckets to derive from this, but will for now. + // Don't really want table to derive from this, but will for now. template struct prime_policy @@ -537,396 +650,6 @@ namespace boost { namespace unordered { namespace detail { std::numeric_limits::digits, std::numeric_limits::radix> {}; - /////////////////////////////////////////////////////////////////// - // - // Buckets - - template - struct buckets : Policy - { - private: - buckets(buckets const&); - buckets& operator=(buckets const&); - public: - typedef boost::unordered::detail::allocator_traits traits; - typedef typename traits::value_type value_type; - - typedef Policy policy; - typedef Node node; - typedef Bucket bucket; - typedef typename boost::unordered::detail::rebind_wrap::type - node_allocator; - typedef typename boost::unordered::detail::rebind_wrap::type - bucket_allocator; - typedef boost::unordered::detail::allocator_traits - node_allocator_traits; - typedef boost::unordered::detail::allocator_traits - bucket_allocator_traits; - typedef typename node_allocator_traits::pointer - node_pointer; - typedef typename node_allocator_traits::const_pointer - const_node_pointer; - typedef typename bucket_allocator_traits::pointer - bucket_pointer; - typedef typename bucket::previous_pointer - previous_pointer; - typedef boost::unordered::detail::node_constructor - node_constructor; - - typedef boost::unordered::iterator_detail:: - iterator iterator; - typedef boost::unordered::iterator_detail:: - c_iterator c_iterator; - typedef boost::unordered::iterator_detail:: - l_iterator l_iterator; - typedef boost::unordered::iterator_detail:: - cl_iterator - cl_iterator; - - // Members - - bucket_pointer buckets_; - std::size_t bucket_count_; - std::size_t size_; - boost::unordered::detail::compressed - allocators_; - - // Data access - - bucket_allocator const& bucket_alloc() const - { - return allocators_.first(); - } - - node_allocator const& node_alloc() const - { - return allocators_.second(); - } - - bucket_allocator& bucket_alloc() - { - return allocators_.first(); - } - - node_allocator& node_alloc() - { - return allocators_.second(); - } - - std::size_t max_bucket_count() const - { - // -1 to account for the start bucket. - return policy::prev_bucket_count( - bucket_allocator_traits::max_size(bucket_alloc()) - 1); - } - - bucket_pointer get_bucket(std::size_t bucket_index) const - { - return buckets_ + static_cast(bucket_index); - } - - previous_pointer get_previous_start() const - { - return this->get_bucket(this->bucket_count_)->first_from_start(); - } - - previous_pointer get_previous_start(std::size_t bucket_index) const - { - return this->get_bucket(bucket_index)->next_; - } - - iterator get_start() const - { - return iterator(static_cast( - this->get_previous_start()->next_)); - } - - iterator get_start(std::size_t bucket_index) const - { - previous_pointer prev = this->get_previous_start(bucket_index); - return prev ? iterator(static_cast(prev->next_)) : - iterator(); - } - - float load_factor() const - { - BOOST_ASSERT(this->bucket_count_ != 0); - return static_cast(this->size_) - / static_cast(this->bucket_count_); - } - - std::size_t bucket_size(std::size_t index) const - { - if (!this->size_) return 0; - iterator it = this->get_start(index); - if (!it.node_) return 0; - - std::size_t count = 0; - while(it.node_ && policy::to_bucket( - this->bucket_count_, it.node_->hash_) == index) - { - ++count; - ++it; - } - - return count; - } - - //////////////////////////////////////////////////////////////////////// - // Constructors - - buckets(node_allocator const& a, std::size_t bucket_count) : - buckets_(), - bucket_count_(bucket_count), - size_(), - allocators_(a,a) - { - } - - buckets(buckets& b, boost::unordered::detail::move_tag m) : - buckets_(), - bucket_count_(b.bucket_count_), - size_(), - allocators_(b.allocators_, m) - { - swap(b); - } - - template - buckets(boost::unordered::detail::table& x, - boost::unordered::detail::move_tag m) : - buckets_(), - bucket_count_(x.bucket_count_), - size_(), - allocators_(x.allocators_, m) - { - swap(x); - } - - //////////////////////////////////////////////////////////////////////// - // Create buckets - // (never called in constructor to avoid exception issues) - - void create_buckets() - { - boost::unordered::detail::array_constructor - constructor(bucket_alloc()); - - // Creates an extra bucket to act as the start node. - constructor.construct(bucket(), this->bucket_count_ + 1); - - if (bucket::extra_node) - { - node_constructor a(this->node_alloc()); - a.construct_node(); - - // Since this node is just to mark the beginning it doesn't - // contain a value, so just construct node::node_base - // which containers the pointer to the next element. - node_allocator_traits::construct(node_alloc(), - static_cast( - boost::addressof(*a.get())), - typename node::node_base()); - - (constructor.get() + - static_cast(this->bucket_count_))->next_ = - a.release(); - } - - this->buckets_ = constructor.release(); - } - - //////////////////////////////////////////////////////////////////////// - // Swap and Move - - void swap(buckets& other, false_type = false_type()) - { - BOOST_ASSERT(node_alloc() == other.node_alloc()); - boost::swap(buckets_, other.buckets_); - boost::swap(bucket_count_, other.bucket_count_); - boost::swap(size_, other.size_); - } - - void swap(buckets& other, true_type) - { - allocators_.swap(other.allocators_); - boost::swap(buckets_, other.buckets_); - boost::swap(bucket_count_, other.bucket_count_); - boost::swap(size_, other.size_); - } - - void move_buckets_from(buckets& other) - { - BOOST_ASSERT(node_alloc() == other.node_alloc()); - BOOST_ASSERT(!this->buckets_); - this->buckets_ = other.buckets_; - this->bucket_count_ = other.bucket_count_; - this->size_ = other.size_; - other.buckets_ = bucket_pointer(); - other.bucket_count_ = 0; - other.size_ = 0; - } - - //////////////////////////////////////////////////////////////////////// - // Delete/destruct - - inline void delete_node(c_iterator n) - { - boost::unordered::detail::destroy_node( - node_alloc(), boost::addressof(*n.node_)); - node_allocator_traits::deallocate(node_alloc(), n.node_, 1); - --size_; - } - - std::size_t delete_nodes(c_iterator begin, c_iterator end) - { - std::size_t count = 0; - - while(begin != end) { - c_iterator n = begin; - ++begin; - delete_node(n); - ++count; - } - - return count; - } - - inline void delete_extra_node(bucket_pointer) {} - - inline void delete_extra_node(node_pointer n) { - node_allocator_traits::destroy(node_alloc(), - static_cast(boost::addressof(*n))); - node_allocator_traits::deallocate(node_alloc(), n, 1); - } - - inline ~buckets() - { - this->delete_buckets(); - } - - void delete_buckets() - { - if(this->buckets_) { - previous_pointer prev = this->get_previous_start(); - - while(prev->next_) { - node_pointer n = static_cast(prev->next_); - prev->next_ = n->next_; - delete_node(iterator(n)); - } - - delete_extra_node(prev); - - bucket_pointer end = this->get_bucket(this->bucket_count_ + 1); - for(bucket_pointer it = this->buckets_; it != end; ++it) - { - bucket_allocator_traits::destroy(bucket_alloc(), - boost::addressof(*it)); - } - - bucket_allocator_traits::deallocate(bucket_alloc(), - this->buckets_, this->bucket_count_ + 1); - - this->buckets_ = bucket_pointer(); - } - - BOOST_ASSERT(!this->size_); - } - - void clear() - { - if(!this->size_) return; - - previous_pointer prev = this->get_previous_start(); - - while(prev->next_) { - node_pointer n = static_cast(prev->next_); - prev->next_ = n->next_; - delete_node(iterator(n)); - } - - bucket_pointer end = this->get_bucket(this->bucket_count_); - for(bucket_pointer it = this->buckets_; it != end; ++it) - { - it->next_ = node_pointer(); - } - - BOOST_ASSERT(!this->size_); - } - - // This is called after erasing a node or group of nodes to fix up - // the bucket pointers. - void fix_buckets(bucket_pointer this_bucket, - previous_pointer prev, node_pointer next) - { - if (!next) - { - if (this_bucket->next_ == prev) - this_bucket->next_ = node_pointer(); - } - else - { - bucket_pointer next_bucket = this->get_bucket( - policy::to_bucket(this->bucket_count_, next->hash_)); - - if (next_bucket != this_bucket) - { - next_bucket->next_ = prev; - if (this_bucket->next_ == prev) - this_bucket->next_ = node_pointer(); - } - } - } - - // This is called after erasing a range of nodes to fix any bucket - // pointers into that range. - void fix_buckets_range(std::size_t bucket_index, - previous_pointer prev, node_pointer begin, node_pointer end) - { - node_pointer n = begin; - - // If we're not at the start of the current bucket, then - // go to the start of the next bucket. - if (this->get_bucket(bucket_index)->next_ != prev) - { - for(;;) { - n = static_cast(n->next_); - if (n == end) return; - - std::size_t new_bucket_index = - policy::to_bucket(this->bucket_count_, n->hash_); - if (bucket_index != new_bucket_index) { - bucket_index = new_bucket_index; - break; - } - } - } - - // Iterate through the remaining nodes, clearing out the bucket - // pointers. - this->get_bucket(bucket_index)->next_ = previous_pointer(); - for(;;) { - n = static_cast(n->next_); - if (n == end) break; - - std::size_t new_bucket_index = - policy::to_bucket(this->bucket_count_, n->hash_); - if (bucket_index != new_bucket_index) { - bucket_index = new_bucket_index; - this->get_bucket(bucket_index)->next_ = previous_pointer(); - } - }; - - // Finally fix the bucket containing the trailing node. - if (n) { - this->get_bucket( - policy::to_bucket(this->bucket_count_, n->hash_))->next_ - = prev; - } - } - }; - //////////////////////////////////////////////////////////////////////////// // Functions @@ -1041,10 +764,36 @@ namespace boost { namespace unordered { namespace detail { tmp_functions_ = !tmp_functions_; } }; + + //////////////////////////////////////////////////////////////////////////// + // rvalue parameters when type can't be a BOOST_RV_REF(T) parameter + // e.g. for int + +#if !defined(BOOST_NO_RVALUE_REFERENCES) +# define BOOST_UNORDERED_RV_REF(T) BOOST_RV_REF(T) +#else + struct please_ignore_this_overload { + typedef please_ignore_this_overload type; + }; + + template + struct rv_ref_impl { + typedef BOOST_RV_REF(T) type; + }; + + template + struct rv_ref : + boost::detail::if_true< + boost::is_class::value + >::BOOST_NESTED_TEMPLATE then < + boost::unordered::detail::rv_ref_impl, + please_ignore_this_overload + >::type + {}; + +# define BOOST_UNORDERED_RV_REF(T) \ + typename boost::unordered::detail::rv_ref::type +#endif }}} -#if defined(BOOST_MSVC) -#pragma warning(pop) -#endif - #endif diff --git a/3party/boost/boost/unordered/detail/equivalent.hpp b/3party/boost/boost/unordered/detail/equivalent.hpp index 5cbf6a7cea..3558b1cb67 100644 --- a/3party/boost/boost/unordered/detail/equivalent.hpp +++ b/3party/boost/boost/unordered/detail/equivalent.hpp @@ -22,44 +22,20 @@ namespace boost { namespace unordered { namespace detail { template struct grouped_node : - boost::unordered::detail::node_base< - typename ::boost::unordered::detail::rebind_wrap< - A, grouped_node >::type::pointer - >, boost::unordered::detail::value_base { typedef typename ::boost::unordered::detail::rebind_wrap< A, grouped_node >::type::pointer link_pointer; - typedef boost::unordered::detail::node_base node_base; + link_pointer next_; link_pointer group_prev_; std::size_t hash_; -#if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT - template - explicit grouped_node(BOOST_UNORDERED_EMPLACE_ARGS) : - node_base(), - group_prev_(), - hash_(0) - { - boost::unordered::detail::construct_impl( - this->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD); - } - - ~grouped_node() { - boost::unordered::detail::destroy(this->value_ptr()); - } - - grouped_node(grouped_node const&) { - assert(false); - } -#else grouped_node() : - node_base(), + next_(), group_prev_(), hash_(0) {} -#endif void init(link_pointer self) { @@ -76,37 +52,16 @@ namespace boost { namespace unordered { namespace detail { boost::unordered::detail::ptr_bucket { typedef boost::unordered::detail::ptr_bucket bucket_base; - typedef bucket_base node_base; typedef ptr_bucket* link_pointer; link_pointer group_prev_; std::size_t hash_; -#if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT - template - explicit grouped_ptr_node(BOOST_UNORDERED_EMPLACE_ARGS) : - bucket_base(), - group_prev_(0), - hash_(0) - { - boost::unordered::detail::construct_impl( - this->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD); - } - - ~grouped_ptr_node() { - boost::unordered::detail::destroy(this->value_ptr()); - } - - grouped_ptr_node(grouped_ptr_node const&) { - assert(false); - } -#else grouped_ptr_node() : bucket_base(), group_prev_(0), hash_(0) {} -#endif void init(link_pointer self) { @@ -170,16 +125,15 @@ namespace boost { namespace unordered { namespace detail { { typedef boost::unordered::detail::multiset types; + typedef A allocator; typedef T value_type; typedef H hasher; typedef P key_equal; typedef T key_type; - typedef typename boost::unordered::detail::rebind_wrap< - A, value_type>::type allocator; - typedef boost::unordered::detail::allocator_traits traits; - typedef boost::unordered::detail::pick_grouped_node pick; + typedef boost::unordered::detail::pick_grouped_node pick; typedef typename pick::node node; typedef typename pick::bucket bucket; typedef typename pick::link_pointer link_pointer; @@ -195,16 +149,15 @@ namespace boost { namespace unordered { namespace detail { { typedef boost::unordered::detail::multimap types; + typedef A allocator; typedef std::pair value_type; typedef H hasher; typedef P key_equal; typedef K key_type; - typedef typename boost::unordered::detail::rebind_wrap< - A, value_type>::type allocator; - typedef boost::unordered::detail::allocator_traits traits; - typedef boost::unordered::detail::pick_grouped_node pick; + typedef boost::unordered::detail::pick_grouped_node pick; typedef typename pick::node node; typedef typename pick::bucket bucket; typedef typename pick::link_pointer link_pointer; @@ -222,7 +175,6 @@ namespace boost { namespace unordered { namespace detail { typedef boost::unordered::detail::table table; typedef typename table::value_type value_type; typedef typename table::bucket bucket; - typedef typename table::buckets buckets; typedef typename table::policy policy; typedef typename table::node_pointer node_pointer; typedef typename table::node_allocator node_allocator; @@ -249,12 +201,17 @@ namespace boost { namespace unordered { namespace detail { grouped_table_impl(grouped_table_impl const& x) : table(x, node_allocator_traits:: - select_on_container_copy_construction(x.node_alloc())) {} + select_on_container_copy_construction(x.node_alloc())) + { + this->init(x); + } grouped_table_impl(grouped_table_impl const& x, node_allocator const& a) : table(x, a) - {} + { + this->init(x); + } grouped_table_impl(grouped_table_impl& x, boost::unordered::detail::move_tag m) @@ -265,7 +222,9 @@ namespace boost { namespace unordered { namespace detail { node_allocator const& a, boost::unordered::detail::move_tag m) : table(x, a, m) - {} + { + this->move_init(x); + } // Accessors @@ -277,7 +236,7 @@ namespace boost { namespace unordered { namespace detail { { std::size_t bucket_index = policy::to_bucket(this->bucket_count_, key_hash); - iterator n = this->get_start(bucket_index); + iterator n = this->begin(bucket_index); for (;;) { @@ -332,9 +291,8 @@ namespace boost { namespace unordered { namespace detail { bool equals(grouped_table_impl const& other) const { if(this->size_ != other.size_) return false; - if(!this->size_) return true; - for(iterator n1 = this->get_start(); n1.node_;) + for(iterator n1 = this->begin(); n1.node_;) { iterator n2 = other.find_matching_node(n1); if (!n2.node_) return false; @@ -532,8 +490,7 @@ namespace boost { namespace unordered { namespace detail { iterator emplace(BOOST_UNORDERED_EMPLACE_ARGS) { node_constructor a(this->node_alloc()); - a.construct_node(); - a.construct_value(BOOST_UNORDERED_EMPLACE_FORWARD); + a.construct_with_value(BOOST_UNORDERED_EMPLACE_FORWARD); return iterator(emplace_impl(a)); } @@ -552,8 +509,7 @@ namespace boost { namespace unordered { namespace detail { std::size_t distance = boost::unordered::detail::distance(i, j); if(distance == 1) { node_constructor a(this->node_alloc()); - a.construct_node(); - a.construct_value2(*i); + a.construct_with_value2(*i); emplace_impl(a); } else { @@ -562,8 +518,7 @@ namespace boost { namespace unordered { namespace detail { node_constructor a(this->node_alloc()); for (; i != j; ++i) { - a.construct_node(); - a.construct_value2(*i); + a.construct_with_value2(*i); emplace_impl_no_rehash(a); } } @@ -575,8 +530,7 @@ namespace boost { namespace unordered { namespace detail { { node_constructor a(this->node_alloc()); for (; i != j; ++i) { - a.construct_node(); - a.construct_value2(*i); + a.construct_with_value2(*i); emplace_impl(a); } } @@ -722,9 +676,9 @@ namespace boost { namespace unordered { namespace detail { if(begin == group2) { link_pointer end1 = group1->group_prev_; - link_pointer end2 = group2->group_prev_; + link_pointer end2 = end->group_prev_; group1->group_prev_ = end2; - group2->group_prev_ = end1; + end->group_prev_ = end1; } } } @@ -755,20 +709,12 @@ namespace boost { namespace unordered { namespace detail { } //////////////////////////////////////////////////////////////////////// - // copy_buckets_to - // - // Basic exception safety. If an exception is thrown this will - // leave dst partially filled and the buckets unset. + // fill_buckets - static void copy_buckets_to(buckets const& src, buckets& dst) + template + static void fill_buckets(iterator n, table& dst, + NodeCreator& creator) { - BOOST_ASSERT(!dst.buckets_); - - dst.create_buckets(); - - node_constructor a(dst.node_alloc()); - - iterator n = src.get_start(); previous_pointer prev = dst.get_previous_start(); while (n.node_) { @@ -778,10 +724,7 @@ namespace boost { namespace unordered { namespace detail { static_cast(n.node_->group_prev_)->next_ )); - a.construct_node(); - a.construct_value2(*n); - - node_pointer first_node = a.release(); + node_pointer first_node = creator.create(*n); node_pointer end = first_node; first_node->hash_ = key_hash; prev->next_ = static_cast(first_node); @@ -789,56 +732,7 @@ namespace boost { namespace unordered { namespace detail { for (++n; n != group_end; ++n) { - a.construct_node(); - a.construct_value2(*n); - end = a.release(); - end->hash_ = key_hash; - add_after_node(end, first_node); - ++dst.size_; - } - - prev = place_in_bucket(dst, prev, end); - } - } - - //////////////////////////////////////////////////////////////////////// - // move_buckets_to - // - // Basic exception safety. The source nodes are left in an unusable - // state if an exception throws. - - static void move_buckets_to(buckets& src, buckets& dst) - { - BOOST_ASSERT(!dst.buckets_); - - dst.create_buckets(); - - node_constructor a(dst.node_alloc()); - - iterator n = src.get_start(); - previous_pointer prev = dst.get_previous_start(); - - while (n.node_) { - std::size_t key_hash = n.node_->hash_; - iterator group_end( - static_cast( - static_cast(n.node_->group_prev_)->next_ - )); - - a.construct_node(); - a.construct_value2(boost::move(*n)); - - node_pointer first_node = a.release(); - node_pointer end = first_node; - first_node->hash_ = key_hash; - prev->next_ = static_cast(first_node); - ++dst.size_; - - for(++n; n != group_end; ++n) - { - a.construct_node(); - a.construct_value2(boost::move(*n)); - end = a.release(); + end = creator.create(*n); end->hash_ = key_hash; add_after_node(end, first_node); ++dst.size_; @@ -851,33 +745,19 @@ namespace boost { namespace unordered { namespace detail { // strong otherwise exception safety void rehash_impl(std::size_t num_buckets) { - BOOST_ASSERT(this->size_); + BOOST_ASSERT(this->buckets_); - buckets dst(this->node_alloc(), num_buckets); - dst.create_buckets(); - - previous_pointer src_start = this->get_previous_start(); - previous_pointer dst_start = dst.get_previous_start(); - - dst_start->next_ = src_start->next_; - src_start->next_ = link_pointer(); - dst.size_ = this->size_; - this->size_ = 0; - - previous_pointer prev = dst_start; + this->create_buckets(num_buckets); + previous_pointer prev = this->get_previous_start(); while (prev->next_) - prev = place_in_bucket(dst, prev, + prev = place_in_bucket(*this, prev, static_cast( static_cast(prev->next_)->group_prev_)); - - // Swap the new nodes back into the container and setup the - // variables. - dst.swap(*this); // no throw } // Iterate through the nodes placing them in the correct buckets. // pre: prev->next_ is not null. - static previous_pointer place_in_bucket(buckets& dst, + static previous_pointer place_in_bucket(table& dst, previous_pointer prev, node_pointer end) { bucket_pointer b = dst.get_bucket(policy::to_bucket( diff --git a/3party/boost/boost/unordered/detail/table.hpp b/3party/boost/boost/unordered/detail/table.hpp index cbf6219554..af376fe720 100644 --- a/3party/boost/boost/unordered/detail/table.hpp +++ b/3party/boost/boost/unordered/detail/table.hpp @@ -13,6 +13,11 @@ #include #include +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4127) // conditional expression is constant +#endif + namespace boost { namespace unordered { namespace detail { //////////////////////////////////////////////////////////////////////////// @@ -54,13 +59,73 @@ namespace boost { namespace unordered { namespace detail { value_base& operator=(value_base const&); }; + template + struct copy_nodes + { + typedef boost::unordered::detail::allocator_traits + node_allocator_traits; + + node_constructor constructor; + + explicit copy_nodes(NodeAlloc& a) : constructor(a) {} + + typename node_allocator_traits::pointer create( + typename node_allocator_traits::value_type::value_type const& v) + { + constructor.construct_with_value2(v); + return constructor.release(); + } + }; + + template + struct move_nodes + { + typedef boost::unordered::detail::allocator_traits + node_allocator_traits; + + node_constructor constructor; + + explicit move_nodes(NodeAlloc& a) : constructor(a) {} + + typename node_allocator_traits::pointer create( + typename node_allocator_traits::value_type::value_type& v) + { + constructor.construct_with_value2(boost::move(v)); + return constructor.release(); + } + }; + + template + struct assign_nodes + { + node_holder holder; + + explicit assign_nodes(Buckets& b) : holder(b) {} + + typename Buckets::node_pointer create( + typename Buckets::value_type const& v) + { + return holder.copy_of(v); + } + }; + + template + struct move_assign_nodes + { + node_holder holder; + + explicit move_assign_nodes(Buckets& b) : holder(b) {} + + typename Buckets::node_pointer create( + typename Buckets::value_type& v) + { + return holder.move_copy_of(v); + } + }; + template struct table : - boost::unordered::detail::buckets< - typename Types::allocator, - typename Types::bucket, - typename Types::node, - typename Types::policy>, + Types::policy, boost::unordered::detail::functions< typename Types::hasher, typename Types::key_equal> @@ -69,6 +134,8 @@ namespace boost { namespace unordered { namespace detail { table(table const&); table& operator=(table const&); public: + typedef typename Types::node node; + typedef typename Types::bucket bucket; typedef typename Types::hasher hasher; typedef typename Types::key_equal key_equal; typedef typename Types::key_type key_type; @@ -82,23 +149,129 @@ namespace boost { namespace unordered { namespace detail { typename Types::hasher, typename Types::key_equal> functions; - typedef boost::unordered::detail::buckets< - typename Types::allocator, - typename Types::bucket, - typename Types::node, - typename Types::policy> buckets; + typedef typename Types::allocator allocator; + typedef typename boost::unordered::detail:: + rebind_wrap::type node_allocator; + typedef typename boost::unordered::detail:: + rebind_wrap::type bucket_allocator; + typedef boost::unordered::detail::allocator_traits + node_allocator_traits; + typedef boost::unordered::detail::allocator_traits + bucket_allocator_traits; + typedef typename node_allocator_traits::pointer + node_pointer; + typedef typename node_allocator_traits::const_pointer + const_node_pointer; + typedef typename bucket_allocator_traits::pointer + bucket_pointer; + typedef typename bucket::previous_pointer + previous_pointer; + typedef boost::unordered::detail::node_constructor + node_constructor; - typedef typename buckets::node_allocator node_allocator; - typedef typename buckets::node_allocator_traits node_allocator_traits; - typedef typename buckets::node_pointer node_pointer; - typedef typename buckets::const_node_pointer const_node_pointer; - - typedef typename table::iterator iterator; + typedef boost::unordered::iterator_detail:: + iterator iterator; + typedef boost::unordered::iterator_detail:: + c_iterator c_iterator; + typedef boost::unordered::iterator_detail:: + l_iterator l_iterator; + typedef boost::unordered::iterator_detail:: + cl_iterator + cl_iterator; + //////////////////////////////////////////////////////////////////////// // Members + boost::unordered::detail::compressed + allocators_; + std::size_t bucket_count_; + std::size_t size_; float mlf_; - std::size_t max_load_; // Only use if this->buckets_. + std::size_t max_load_; + bucket_pointer buckets_; + + //////////////////////////////////////////////////////////////////////// + // Data access + + bucket_allocator const& bucket_alloc() const + { + return allocators_.first(); + } + + node_allocator const& node_alloc() const + { + return allocators_.second(); + } + + bucket_allocator& bucket_alloc() + { + return allocators_.first(); + } + + node_allocator& node_alloc() + { + return allocators_.second(); + } + + std::size_t max_bucket_count() const + { + // -1 to account for the start bucket. + return policy::prev_bucket_count( + bucket_allocator_traits::max_size(bucket_alloc()) - 1); + } + + bucket_pointer get_bucket(std::size_t bucket_index) const + { + BOOST_ASSERT(buckets_); + return buckets_ + static_cast(bucket_index); + } + + previous_pointer get_previous_start() const + { + return get_bucket(bucket_count_)->first_from_start(); + } + + previous_pointer get_previous_start(std::size_t bucket_index) const + { + return get_bucket(bucket_index)->next_; + } + + iterator begin() const + { + return size_ ? iterator(static_cast( + get_previous_start()->next_)) : iterator(); + } + + iterator begin(std::size_t bucket_index) const + { + if (!size_) return iterator(); + previous_pointer prev = get_previous_start(bucket_index); + return prev ? iterator(static_cast(prev->next_)) : + iterator(); + } + + float load_factor() const + { + BOOST_ASSERT(bucket_count_ != 0); + return static_cast(size_) + / static_cast(bucket_count_); + } + + std::size_t bucket_size(std::size_t index) const + { + iterator it = begin(index); + if (!it.node_) return 0; + + std::size_t count = 0; + while(it.node_ && policy::to_bucket( + bucket_count_, it.node_->hash_) == index) + { + ++count; + ++it; + } + + return count; + } //////////////////////////////////////////////////////////////////////// // Load methods @@ -109,34 +282,34 @@ namespace boost { namespace unordered { namespace detail { // size < mlf_ * count return boost::unordered::detail::double_to_size(ceil( - static_cast(this->mlf_) * - static_cast(this->max_bucket_count()) + static_cast(mlf_) * + static_cast(max_bucket_count()) )) - 1; } - std::size_t calculate_max_load() + void recalculate_max_load() { using namespace std; // From 6.3.1/13: // Only resize when size >= mlf_ * count - return boost::unordered::detail::double_to_size(ceil( - static_cast(this->mlf_) * - static_cast(this->bucket_count_) - )); + max_load_ = buckets_ ? boost::unordered::detail::double_to_size(ceil( + static_cast(mlf_) * + static_cast(bucket_count_) + )) : 0; } + void max_load_factor(float z) { BOOST_ASSERT(z > 0); mlf_ = (std::max)(z, minimum_max_load_factor); - if (this->buckets_) - this->max_load_ = this->calculate_max_load(); + recalculate_max_load(); } std::size_t min_buckets_for_size(std::size_t size) const { - BOOST_ASSERT(this->mlf_ >= minimum_max_load_factor); + BOOST_ASSERT(mlf_ >= minimum_max_load_factor); using namespace std; @@ -160,127 +333,449 @@ namespace boost { namespace unordered { namespace detail { hasher const& hf, key_equal const& eq, node_allocator const& a) : - buckets(a, policy::new_bucket_count(num_buckets)), functions(hf, eq), + allocators_(a,a), + bucket_count_(policy::new_bucket_count(num_buckets)), + size_(0), mlf_(1.0f), - max_load_(0) + max_load_(0), + buckets_() {} table(table const& x, node_allocator const& a) : - buckets(a, x.min_buckets_for_size(x.size_)), functions(x), + allocators_(a,a), + bucket_count_(x.min_buckets_for_size(x.size_)), + size_(0), mlf_(x.mlf_), - max_load_(0) - { - if(x.size_) { - table_impl::copy_buckets_to(x, *this); - this->max_load_ = calculate_max_load(); - } - } - - // TODO: Why calculate_max_load? - table(table& x, boost::unordered::detail::move_tag m) : - buckets(x, m), - functions(x), - mlf_(x.mlf_), - max_load_(calculate_max_load()) + max_load_(0), + buckets_() {} - // TODO: Why not calculate_max_load? - // TODO: Why do I use x's bucket count? - table(table& x, node_allocator const& a, - boost::unordered::detail::move_tag m) : - buckets(a, x.bucket_count_), + table(table& x, boost::unordered::detail::move_tag m) : functions(x), + allocators_(x.allocators_, m), + bucket_count_(x.bucket_count_), + size_(x.size_), mlf_(x.mlf_), - max_load_(x.max_load_) + max_load_(x.max_load_), + buckets_(x.buckets_) { - if(a == x.node_alloc()) { - this->buckets::swap(x, false_type()); + x.buckets_ = bucket_pointer(); + x.size_ = 0; + x.max_load_ = 0; + } + + table(table& x, node_allocator const& a, + boost::unordered::detail::move_tag) : + functions(x), + allocators_(a, a), + bucket_count_(x.bucket_count_), + size_(0), + mlf_(x.mlf_), + max_load_(x.max_load_), + buckets_() + {} + + //////////////////////////////////////////////////////////////////////// + // Initialisation. + + void init(table const& x) + { + if (x.size_) { + create_buckets(bucket_count_); + copy_nodes copy(node_alloc()); + table_impl::fill_buckets(x.begin(), *this, copy); + } + } + + void move_init(table& x) + { + if(node_alloc() == x.node_alloc()) { + move_buckets_from(x); } else if(x.size_) { - // Use a temporary table because move_buckets_to leaves the - // source container in a complete mess. + // TODO: Could pick new bucket size? + create_buckets(bucket_count_); - buckets tmp(x, m); - table_impl::move_buckets_to(tmp, *this); - this->max_load_ = calculate_max_load(); + move_nodes move(node_alloc()); + node_holder nodes(x); + table_impl::fill_buckets(nodes.begin(), *this, move); } } - // Iterators + //////////////////////////////////////////////////////////////////////// + // Create buckets - iterator begin() const { - return !this->buckets_ ? - iterator() : this->get_start(); + void create_buckets(std::size_t new_count) + { + boost::unordered::detail::array_constructor + constructor(bucket_alloc()); + + // Creates an extra bucket to act as the start node. + constructor.construct(bucket(), new_count + 1); + + if (buckets_) + { + // Copy the nodes to the new buckets, including the dummy + // node if there is one. + (constructor.get() + + static_cast(new_count))->next_ = + (buckets_ + static_cast( + bucket_count_))->next_; + destroy_buckets(); + } + else if (bucket::extra_node) + { + node_constructor a(node_alloc()); + a.construct(); + + (constructor.get() + + static_cast(new_count))->next_ = + a.release(); + } + + bucket_count_ = new_count; + buckets_ = constructor.release(); + recalculate_max_load(); } + //////////////////////////////////////////////////////////////////////// + // Swap and Move + + void swap_allocators(table& other, false_type) + { + // According to 23.2.1.8, if propagate_on_container_swap is + // false the behaviour is undefined unless the allocators + // are equal. + BOOST_ASSERT(node_alloc() == other.node_alloc()); + } + + void swap_allocators(table& other, true_type) + { + allocators_.swap(other.allocators_); + } + + // Only swaps the allocators if propagate_on_container_swap + void swap(table& x) + { + boost::unordered::detail::set_hash_functions + op1(*this, x); + boost::unordered::detail::set_hash_functions + op2(x, *this); + + // I think swap can throw if Propagate::value, + // since the allocators' swap can throw. Not sure though. + swap_allocators(x, + boost::unordered::detail::integral_constant:: + propagate_on_container_swap::value>()); + + boost::swap(buckets_, x.buckets_); + boost::swap(bucket_count_, x.bucket_count_); + boost::swap(size_, x.size_); + std::swap(mlf_, x.mlf_); + std::swap(max_load_, x.max_load_); + op1.commit(); + op2.commit(); + } + + void move_buckets_from(table& other) + { + BOOST_ASSERT(node_alloc() == other.node_alloc()); + BOOST_ASSERT(!buckets_); + buckets_ = other.buckets_; + bucket_count_ = other.bucket_count_; + size_ = other.size_; + other.buckets_ = bucket_pointer(); + other.size_ = 0; + other.max_load_ = 0; + } + + //////////////////////////////////////////////////////////////////////// + // Delete/destruct + + ~table() + { + delete_buckets(); + } + + void delete_node(c_iterator n) + { + boost::unordered::detail::destroy_value_impl(node_alloc(), + n.node_->value_ptr()); + node_allocator_traits::destroy(node_alloc(), + boost::addressof(*n.node_)); + node_allocator_traits::deallocate(node_alloc(), n.node_, 1); + --size_; + } + + std::size_t delete_nodes(c_iterator begin, c_iterator end) + { + std::size_t count = 0; + + while(begin != end) { + c_iterator n = begin; + ++begin; + delete_node(n); + ++count; + } + + return count; + } + + void delete_buckets() + { + if(buckets_) { + delete_nodes(begin(), iterator()); + + if (bucket::extra_node) { + node_pointer n = static_cast( + get_bucket(bucket_count_)->next_); + node_allocator_traits::destroy(node_alloc(), + boost::addressof(*n)); + node_allocator_traits::deallocate(node_alloc(), n, 1); + } + + destroy_buckets(); + buckets_ = bucket_pointer(); + max_load_ = 0; + } + + BOOST_ASSERT(!size_); + } + + void clear() + { + if(!size_) return; + + delete_nodes(begin(), iterator()); + get_previous_start()->next_ = link_pointer(); + clear_buckets(); + + BOOST_ASSERT(!size_); + } + + void clear_buckets() + { + bucket_pointer end = get_bucket(bucket_count_); + for(bucket_pointer it = buckets_; it != end; ++it) + { + it->next_ = node_pointer(); + } + } + + void destroy_buckets() + { + bucket_pointer end = get_bucket(bucket_count_ + 1); + for(bucket_pointer it = buckets_; it != end; ++it) + { + bucket_allocator_traits::destroy(bucket_alloc(), + boost::addressof(*it)); + } + + bucket_allocator_traits::deallocate(bucket_alloc(), + buckets_, bucket_count_ + 1); + } + + //////////////////////////////////////////////////////////////////////// + // Fix buckets after erase + + // This is called after erasing a node or group of nodes to fix up + // the bucket pointers. + void fix_buckets(bucket_pointer this_bucket, + previous_pointer prev, node_pointer next) + { + if (!next) + { + if (this_bucket->next_ == prev) + this_bucket->next_ = node_pointer(); + } + else + { + bucket_pointer next_bucket = get_bucket( + policy::to_bucket(bucket_count_, next->hash_)); + + if (next_bucket != this_bucket) + { + next_bucket->next_ = prev; + if (this_bucket->next_ == prev) + this_bucket->next_ = node_pointer(); + } + } + } + + // This is called after erasing a range of nodes to fix any bucket + // pointers into that range. + void fix_buckets_range(std::size_t bucket_index, + previous_pointer prev, node_pointer begin, node_pointer end) + { + node_pointer n = begin; + + // If we're not at the start of the current bucket, then + // go to the start of the next bucket. + if (get_bucket(bucket_index)->next_ != prev) + { + for(;;) { + n = static_cast(n->next_); + if (n == end) { + if (n) { + std::size_t new_bucket_index = + policy::to_bucket(bucket_count_, n->hash_); + if (bucket_index != new_bucket_index) { + get_bucket(new_bucket_index)->next_ = prev; + } + } + return; + } + + std::size_t new_bucket_index = + policy::to_bucket(bucket_count_, n->hash_); + if (bucket_index != new_bucket_index) { + bucket_index = new_bucket_index; + break; + } + } + } + + // Iterate through the remaining nodes, clearing out the bucket + // pointers. + get_bucket(bucket_index)->next_ = previous_pointer(); + for(;;) { + n = static_cast(n->next_); + if (n == end) break; + + std::size_t new_bucket_index = + policy::to_bucket(bucket_count_, n->hash_); + if (bucket_index != new_bucket_index) { + bucket_index = new_bucket_index; + get_bucket(bucket_index)->next_ = previous_pointer(); + } + }; + + // Finally fix the bucket containing the trailing node. + if (n) { + get_bucket( + policy::to_bucket(bucket_count_, n->hash_))->next_ + = prev; + } + } + + //////////////////////////////////////////////////////////////////////// // Assignment void assign(table const& x) { - assign(x, - boost::unordered::detail::integral_constant:: - propagate_on_container_copy_assignment::value>()); + if (this != boost::addressof(x)) + { + assign(x, + boost::unordered::detail::integral_constant:: + propagate_on_container_copy_assignment::value>()); + } } void assign(table const& x, false_type) { - table tmp(x, this->node_alloc()); - this->swap(tmp, false_type()); + // Strong exception safety. + boost::unordered::detail::set_hash_functions + new_func_this(*this, x); + new_func_this.commit(); + mlf_ = x.mlf_; + recalculate_max_load(); + + if (!size_ && !x.size_) return; + + if (x.size_ >= max_load_) { + create_buckets(min_buckets_for_size(x.size_)); + } + else { + clear_buckets(); + } + + // assign_nodes takes ownership of the container's elements, + // assigning to them if possible, and deleting any that are + // left over. + assign_nodes assign(*this); + table_impl::fill_buckets(x.begin(), *this, assign); } void assign(table const& x, true_type) { - table tmp(x, x.node_alloc()); - // Need to delete before setting the allocator so that buckets - // aren't deleted with the wrong allocator. - if(this->buckets_) this->delete_buckets(); - // TODO: Can allocator assignment throw? - this->allocators_.assign(x.allocators_); - this->swap(tmp, false_type()); - } - - void move_assign(table& x) - { - move_assign(x, - boost::unordered::detail::integral_constant:: - propagate_on_container_move_assignment::value>()); - } - - void move_assign(table& x, true_type) - { - if(this->buckets_) this->delete_buckets(); - this->allocators_.move_assign(x.allocators_); - move_assign_no_alloc(x); - } - - void move_assign(table& x, false_type) - { - if(this->node_alloc() == x.node_alloc()) { - if(this->buckets_) this->delete_buckets(); - move_assign_no_alloc(x); + if (node_alloc() == x.node_alloc()) { + allocators_.assign(x.allocators_); + assign(x, false_type()); } else { boost::unordered::detail::set_hash_functions new_func_this(*this, x); + // Delete everything with current allocators before assigning + // the new ones. + delete_buckets(); + allocators_.assign(x.allocators_); + + // Copy over other data, all no throw. + new_func_this.commit(); + mlf_ = x.mlf_; + bucket_count_ = min_buckets_for_size(x.size_); + max_load_ = 0; + + // Finally copy the elements. if (x.size_) { - buckets b(this->node_alloc(), - x.min_buckets_for_size(x.size_)); - buckets tmp(x, move_tag()); - table_impl::move_buckets_to(tmp, b); - b.swap(*this); + create_buckets(bucket_count_); + copy_nodes copy(node_alloc()); + table_impl::fill_buckets(x.begin(), *this, copy); + } + } + } + + void move_assign(table& x) + { + if (this != boost::addressof(x)) + { + move_assign(x, + boost::unordered::detail::integral_constant:: + propagate_on_container_move_assignment::value>()); + } + } + + void move_assign(table& x, true_type) + { + delete_buckets(); + allocators_.move_assign(x.allocators_); + move_assign_no_alloc(x); + } + + void move_assign(table& x, false_type) + { + if (node_alloc() == x.node_alloc()) { + delete_buckets(); + move_assign_no_alloc(x); + } + else { + boost::unordered::detail::set_hash_functions + new_func_this(*this, x); + new_func_this.commit(); + mlf_ = x.mlf_; + recalculate_max_load(); + + if (!size_ && !x.size_) return; + + if (x.size_ >= max_load_) { + create_buckets(min_buckets_for_size(x.size_)); } else { - this->clear(); + clear_buckets(); } - - this->mlf_ = x.mlf_; - if (this->buckets_) this->max_load_ = calculate_max_load(); - new_func_this.commit(); + + // move_assign_nodes takes ownership of the container's + // elements, assigning to them if possible, and deleting + // any that are left over. + move_assign_nodes
assign(*this); + node_holder nodes(x); + table_impl::fill_buckets(nodes.begin(), *this, assign); } } @@ -289,48 +784,12 @@ namespace boost { namespace unordered { namespace detail { boost::unordered::detail::set_hash_functions new_func_this(*this, x); // No throw from here. - this->move_buckets_from(x); - this->mlf_ = x.mlf_; - this->max_load_ = x.max_load_; + mlf_ = x.mlf_; + max_load_ = x.max_load_; + move_buckets_from(x); new_func_this.commit(); } - //////////////////////////////////////////////////////////////////////// - // Swap & Move - - void swap(table& x) - { - swap(x, - boost::unordered::detail::integral_constant:: - propagate_on_container_swap::value>()); - } - - // Only swaps the allocators if Propagate::value - template - void swap(table& x, Propagate p) - { - boost::unordered::detail::set_hash_functions - op1(*this, x); - boost::unordered::detail::set_hash_functions - op2(x, *this); - // I think swap can throw if Propagate::value, - // since the allocators' swap can throw. Not sure though. - this->buckets::swap(x, p); - std::swap(this->mlf_, x.mlf_); - std::swap(this->max_load_, x.max_load_); - op1.commit(); - op2.commit(); - } - - // Swap everything but the allocators, and the functions objects. - void swap_contents(table& x) - { - this->buckets::swap(x, false_type()); - std::swap(this->mlf_, x.mlf_); - std::swap(this->max_load_, x.max_load_); - } - // Accessors key_type const& get_key(value_type const& x) const @@ -351,7 +810,6 @@ namespace boost { namespace unordered { namespace detail { Hash const& hf, Pred const& eq) const { - if (!this->size_) return iterator(); return static_cast(this)-> find_node_impl(policy::apply_hash(hf, k), k, eq); } @@ -360,16 +818,14 @@ namespace boost { namespace unordered { namespace detail { std::size_t key_hash, key_type const& k) const { - if (!this->size_) return iterator(); return static_cast(this)-> find_node_impl(key_hash, k, this->key_eq()); } iterator find_node(key_type const& k) const { - if (!this->size_) return iterator(); return static_cast(this)-> - find_node_impl(this->hash(k), k, this->key_eq()); + find_node_impl(hash(k), k, this->key_eq()); } iterator find_matching_node(iterator n) const @@ -397,22 +853,19 @@ namespace boost { namespace unordered { namespace detail { template inline void table::reserve_for_insert(std::size_t size) { - if (!this->buckets_) { - this->bucket_count_ = (std::max)(this->bucket_count_, - this->min_buckets_for_size(size)); - this->create_buckets(); - this->max_load_ = this->calculate_max_load(); + if (!buckets_) { + create_buckets((std::max)(bucket_count_, + min_buckets_for_size(size))); } // According to the standard this should be 'size >= max_load_', // but I think this is better, defect report filed. else if(size > max_load_) { std::size_t num_buckets - = this->min_buckets_for_size((std::max)(size, - this->size_ + (this->size_ >> 1))); - if (num_buckets != this->bucket_count_) { + = min_buckets_for_size((std::max)(size, + size_ + (size_ >> 1))); + + if (num_buckets != bucket_count_) static_cast(this)->rehash_impl(num_buckets); - this->max_load_ = this->calculate_max_load(); - } } } @@ -424,20 +877,18 @@ namespace boost { namespace unordered { namespace detail { { using namespace std; - if(!this->size_) { - if(this->buckets_) this->delete_buckets(); - this->bucket_count_ = policy::new_bucket_count(min_buckets); + if(!size_) { + delete_buckets(); + bucket_count_ = policy::new_bucket_count(min_buckets); } else { min_buckets = policy::new_bucket_count((std::max)(min_buckets, boost::unordered::detail::double_to_size(floor( - static_cast(this->size_) / + static_cast(size_) / static_cast(mlf_))) + 1)); - if(min_buckets != this->bucket_count_) { + if(min_buckets != bucket_count_) static_cast(this)->rehash_impl(min_buckets); - this->max_load_ = this->calculate_max_load(); - } } } @@ -445,8 +896,12 @@ namespace boost { namespace unordered { namespace detail { inline void table::reserve(std::size_t num_elements) { rehash(static_cast( - std::ceil(static_cast(num_elements) / this->mlf_))); + std::ceil(static_cast(num_elements) / mlf_))); } }}} +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + #endif diff --git a/3party/boost/boost/unordered/detail/unique.hpp b/3party/boost/boost/unordered/detail/unique.hpp index 10db58fa75..880565251e 100644 --- a/3party/boost/boost/unordered/detail/unique.hpp +++ b/3party/boost/boost/unordered/detail/unique.hpp @@ -24,41 +24,18 @@ namespace boost { namespace unordered { namespace detail { template struct unique_node : - boost::unordered::detail::node_base< - typename ::boost::unordered::detail::rebind_wrap< - A, unique_node >::type::pointer - >, boost::unordered::detail::value_base { typedef typename ::boost::unordered::detail::rebind_wrap< A, unique_node >::type::pointer link_pointer; - typedef boost::unordered::detail::node_base node_base; + link_pointer next_; std::size_t hash_; -#if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT - template - explicit unique_node(BOOST_UNORDERED_EMPLACE_ARGS) : - node_base(), - hash_(0) - { - boost::unordered::detail::construct_impl( - this->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD); - } - - ~unique_node() { - boost::unordered::detail::destroy(this->value_ptr()); - } - - unique_node(unique_node const&) { - BOOST_ASSERT(false); - } -#else unique_node() : - node_base(), + next_(), hash_(0) {} -#endif void init(link_pointer) { @@ -74,34 +51,14 @@ namespace boost { namespace unordered { namespace detail { boost::unordered::detail::ptr_bucket { typedef boost::unordered::detail::ptr_bucket bucket_base; - typedef bucket_base node_base; typedef ptr_bucket* link_pointer; std::size_t hash_; -#if BOOST_UNORDERED_DETAIL_FULL_CONSTRUCT - template - explicit ptr_node(BOOST_UNORDERED_EMPLACE_ARGS) : - bucket_base(), - hash_(0) - { - boost::unordered::detail::construct_impl( - this->value_ptr(), BOOST_UNORDERED_EMPLACE_FORWARD); - } - - ~ptr_node() { - boost::unordered::detail::destroy(this->value_ptr()); - } - - ptr_node(ptr_node const&) { - BOOST_ASSERT(false); - } -#else ptr_node() : bucket_base(), hash_(0) {} -#endif void init(link_pointer) { @@ -164,14 +121,12 @@ namespace boost { namespace unordered { namespace detail { { typedef boost::unordered::detail::set types; + typedef A allocator; typedef T value_type; typedef H hasher; typedef P key_equal; typedef T key_type; - typedef typename boost::unordered::detail::rebind_wrap< - A, value_type>::type allocator; - typedef boost::unordered::detail::allocator_traits traits; typedef boost::unordered::detail::pick_node pick; typedef typename pick::node node; @@ -189,15 +144,14 @@ namespace boost { namespace unordered { namespace detail { { typedef boost::unordered::detail::map types; + typedef A allocator; typedef std::pair value_type; typedef H hasher; typedef P key_equal; typedef K key_type; - typedef typename boost::unordered::detail::rebind_wrap< - A, value_type>::type allocator; - - typedef boost::unordered::detail::allocator_traits traits; + typedef boost::unordered::detail::allocator_traits + traits; typedef boost::unordered::detail::pick_node pick; typedef typename pick::node node; typedef typename pick::bucket bucket; @@ -216,7 +170,6 @@ namespace boost { namespace unordered { namespace detail { typedef boost::unordered::detail::table table; typedef typename table::value_type value_type; typedef typename table::bucket bucket; - typedef typename table::buckets buckets; typedef typename table::policy policy; typedef typename table::node_pointer node_pointer; typedef typename table::node_allocator node_allocator; @@ -245,12 +198,17 @@ namespace boost { namespace unordered { namespace detail { table_impl(table_impl const& x) : table(x, node_allocator_traits:: - select_on_container_copy_construction(x.node_alloc())) {} + select_on_container_copy_construction(x.node_alloc())) + { + this->init(x); + } table_impl(table_impl const& x, node_allocator const& a) : table(x, a) - {} + { + this->init(x); + } table_impl(table_impl& x, boost::unordered::detail::move_tag m) @@ -261,7 +219,9 @@ namespace boost { namespace unordered { namespace detail { node_allocator const& a, boost::unordered::detail::move_tag m) : table(x, a, m) - {} + { + this->move_init(x); + } // Accessors @@ -273,7 +233,7 @@ namespace boost { namespace unordered { namespace detail { { std::size_t bucket_index = policy::to_bucket(this->bucket_count_, key_hash); - iterator n = this->get_start(bucket_index); + iterator n = this->begin(bucket_index); for (;;) { @@ -326,9 +286,8 @@ namespace boost { namespace unordered { namespace detail { bool equals(table_impl const& other) const { if(this->size_ != other.size_) return false; - if(!this->size_) return true; - for(iterator n1 = this->get_start(); n1.node_; ++n1) + for(iterator n1 = this->begin(); n1.node_; ++n1) { iterator n2 = other.find_matching_node(n1); @@ -392,9 +351,7 @@ namespace boost { namespace unordered { namespace detail { // Create the node before rehashing in case it throws an // exception (need strong safety in such a case). node_constructor a(this->node_alloc()); - a.construct_node(); - - a.construct_value(BOOST_UNORDERED_EMPLACE_ARGS3( + a.construct_with_value(BOOST_UNORDERED_EMPLACE_ARGS3( boost::unordered::piecewise_construct, boost::make_tuple(k), boost::make_tuple())); @@ -456,8 +413,7 @@ namespace boost { namespace unordered { namespace detail { // Create the node before rehashing in case it throws an // exception (need strong safety in such a case). node_constructor a(this->node_alloc()); - a.construct_node(); - a.construct_value(BOOST_UNORDERED_EMPLACE_FORWARD); + a.construct_with_value(BOOST_UNORDERED_EMPLACE_FORWARD); // reserve has basic exception safety if the hash function // throws, strong otherwise. @@ -485,8 +441,7 @@ namespace boost { namespace unordered { namespace detail { // Don't have a key, so construct the node first in order // to be able to lookup the position. node_constructor a(this->node_alloc()); - a.construct_node(); - a.construct_value(BOOST_UNORDERED_EMPLACE_FORWARD); + a.construct_with_value(BOOST_UNORDERED_EMPLACE_FORWARD); return emplace_impl_with_node(a); } @@ -508,14 +463,9 @@ namespace boost { namespace unordered { namespace detail { { node_constructor a(this->node_alloc()); - // Special case for empty buckets so that we can use - // max_load_ (which isn't valid when buckets_ is null). - if (!this->buckets_) { - insert_range_empty(a, k, i, j); - if (++i == j) return; - } + insert_range_impl2(a, k, i, j); - do { + while(++i != j) { // Note: can't use get_key as '*i' might not be value_type - it // could be a pair with first_types as key_type without const or // a different second_type. @@ -525,19 +475,7 @@ namespace boost { namespace unordered { namespace detail { // be less efficient if copying the full value_type is // expensive. insert_range_impl2(a, extractor::extract(*i), i, j); - } while(++i != j); - } - - template - void insert_range_empty(node_constructor& a, key_type const& k, - InputIt i, InputIt j) - { - std::size_t key_hash = this->hash(k); - a.construct_node(); - a.construct_value2(*i); - this->reserve_for_insert(this->size_ + - boost::unordered::detail::insert_size(i, j)); - this->add_node(a, key_hash); + } } template @@ -549,9 +487,7 @@ namespace boost { namespace unordered { namespace detail { iterator pos = this->find_node(key_hash, k); if (!pos.node_) { - a.construct_node(); - a.construct_value2(*i); - + a.construct_with_value2(*i); if(this->size_ + 1 > this->max_load_) this->reserve_for_insert(this->size_ + boost::unordered::detail::insert_size(i, j)); @@ -567,8 +503,7 @@ namespace boost { namespace unordered { namespace detail { node_constructor a(this->node_alloc()); do { - a.construct_node(); - a.construct_value2(*i); + a.construct_with_value2(*i); emplace_impl_with_node(a); } while(++i != j); } @@ -660,58 +595,16 @@ namespace boost { namespace unordered { namespace detail { } //////////////////////////////////////////////////////////////////////// - // copy_buckets_to - // - // Basic exception safety. If an exception is thrown this will - // leave dst partially filled and the buckets unset. + // fill_buckets - static void copy_buckets_to(buckets const& src, buckets& dst) + template + static void fill_buckets(iterator n, table& dst, + NodeCreator& creator) { - BOOST_ASSERT(!dst.buckets_); - - dst.create_buckets(); - - node_constructor a(dst.node_alloc()); - - iterator n = src.get_start(); - previous_pointer prev = dst.get_previous_start(); - - while(n.node_) { - a.construct_node(); - a.construct_value2(*n); - - node_pointer node = a.release(); - node->hash_ = n.node_->hash_; - prev->next_ = static_cast(node); - ++dst.size_; - ++n; - - prev = place_in_bucket(dst, prev); - } - } - - //////////////////////////////////////////////////////////////////////// - // move_buckets_to - // - // Basic exception safety. The source nodes are left in an unusable - // state if an exception throws. - - static void move_buckets_to(buckets& src, buckets& dst) - { - BOOST_ASSERT(!dst.buckets_); - - dst.create_buckets(); - - node_constructor a(dst.node_alloc()); - - iterator n = src.get_start(); previous_pointer prev = dst.get_previous_start(); while (n.node_) { - a.construct_node(); - a.construct_value2(boost::move(*n)); - - node_pointer node = a.release(); + node_pointer node = creator.create(*n); node->hash_ = n.node_->hash_; prev->next_ = static_cast(node); ++dst.size_; @@ -724,36 +617,22 @@ namespace boost { namespace unordered { namespace detail { // strong otherwise exception safety void rehash_impl(std::size_t num_buckets) { - BOOST_ASSERT(this->size_); + BOOST_ASSERT(this->buckets_); - buckets dst(this->node_alloc(), num_buckets); - dst.create_buckets(); - - previous_pointer src_start = this->get_previous_start(); - previous_pointer dst_start = dst.get_previous_start(); - - dst_start->next_ = src_start->next_; - src_start->next_ = link_pointer(); - dst.size_ = this->size_; - this->size_ = 0; - - previous_pointer prev = dst.get_previous_start(); + this->create_buckets(num_buckets); + previous_pointer prev = this->get_previous_start(); while (prev->next_) - prev = place_in_bucket(dst, prev); - - // Swap the new nodes back into the container and setup the - // variables. - dst.swap(*this); // no throw + prev = place_in_bucket(*this, prev); } // Iterate through the nodes placing them in the correct buckets. // pre: prev->next_ is not null. - static previous_pointer place_in_bucket(buckets& dst, + static previous_pointer place_in_bucket(table& dst, previous_pointer prev) { node_pointer n = static_cast(prev->next_); bucket_pointer b = dst.get_bucket( - buckets::to_bucket(dst.bucket_count_, n->hash_)); + table::to_bucket(dst.bucket_count_, n->hash_)); if (!b->next_) { b->next_ = prev; diff --git a/3party/boost/boost/unordered/unordered_map.hpp b/3party/boost/boost/unordered/unordered_map.hpp index ce52e5becf..d606739517 100644 --- a/3party/boost/boost/unordered/unordered_map.hpp +++ b/3party/boost/boost/unordered/unordered_map.hpp @@ -56,7 +56,6 @@ namespace unordered private: typedef boost::unordered::detail::map types; - typedef typename types::allocator value_allocator; typedef typename types::traits allocator_traits; typedef typename types::table table; @@ -470,16 +469,14 @@ namespace unordered local_iterator begin(size_type n) { - return table_.size_ ? local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - local_iterator(); + return local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator begin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } local_iterator end(size_type) @@ -494,9 +491,8 @@ namespace unordered const_local_iterator cbegin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator cend(size_type) const @@ -542,7 +538,6 @@ namespace unordered private: typedef boost::unordered::detail::multimap types; - typedef typename types::allocator value_allocator; typedef typename types::traits allocator_traits; typedef typename types::table table; @@ -953,16 +948,14 @@ namespace unordered local_iterator begin(size_type n) { - return table_.size_ ? local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - local_iterator(); + return local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator begin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } local_iterator end(size_type) @@ -977,9 +970,8 @@ namespace unordered const_local_iterator cbegin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator cend(size_type) const diff --git a/3party/boost/boost/unordered/unordered_set.hpp b/3party/boost/boost/unordered/unordered_set.hpp index 5d9a0b8e8d..92cb2f655f 100644 --- a/3party/boost/boost/unordered/unordered_set.hpp +++ b/3party/boost/boost/unordered/unordered_set.hpp @@ -54,7 +54,6 @@ namespace unordered private: typedef boost::unordered::detail::set types; - typedef typename types::allocator value_allocator; typedef typename types::traits allocator_traits; typedef typename types::table table; @@ -455,16 +454,14 @@ namespace unordered local_iterator begin(size_type n) { - return table_.size_ ? local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - local_iterator(); + return local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator begin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } local_iterator end(size_type) @@ -479,9 +476,8 @@ namespace unordered const_local_iterator cbegin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator cend(size_type) const @@ -526,7 +522,6 @@ namespace unordered private: typedef boost::unordered::detail::multiset types; - typedef typename types::allocator value_allocator; typedef typename types::traits allocator_traits; typedef typename types::table table; @@ -928,16 +923,14 @@ namespace unordered local_iterator begin(size_type n) { - return table_.size_ ? local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - local_iterator(); + return local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator begin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } local_iterator end(size_type) @@ -952,9 +945,8 @@ namespace unordered const_local_iterator cbegin(size_type n) const { - return table_.size_ ? const_local_iterator( - table_.get_start(n), n, table_.bucket_count_) : - const_local_iterator(); + return const_local_iterator( + table_.begin(n), n, table_.bucket_count_); } const_local_iterator cend(size_type) const diff --git a/3party/boost/boost/utility/detail/result_of_iterate.hpp b/3party/boost/boost/utility/detail/result_of_iterate.hpp index 1ec857a2fc..17fd4d59f9 100644 --- a/3party/boost/boost/utility/detail/result_of_iterate.hpp +++ b/3party/boost/boost/utility/detail/result_of_iterate.hpp @@ -5,6 +5,11 @@ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +// Copyright Daniel Walker, Eric Niebler, Michel Morin 2008-2012. +// Use, modification and distribution is subject to the Boost Software +// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or +// copy at http://www.boost.org/LICENSE_1_0.txt) + // For more information, see http://www.boost.org/libs/utility #if !defined(BOOST_PP_IS_ITERATING) # error Boost result_of - do not include this file! @@ -18,31 +23,29 @@ #endif #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) -template +template struct tr1_result_of : mpl::if_< mpl::or_< is_pointer, is_member_function_pointer > , boost::detail::tr1_result_of_impl< - typename remove_cv::type, - typename remove_cv::type(BOOST_RESULT_OF_ARGS), + typename remove_cv::type, + typename remove_cv::type(BOOST_RESULT_OF_ARGS), (boost::detail::has_result_type::value)> , boost::detail::tr1_result_of_impl< F, - F(BOOST_RESULT_OF_ARGS), + F(BOOST_RESULT_OF_ARGS), (boost::detail::has_result_type::value)> >::type { }; #endif -#if !defined(BOOST_NO_DECLTYPE) && defined(BOOST_RESULT_OF_USE_DECLTYPE) +#ifdef BOOST_RESULT_OF_USE_DECLTYPE // Uses declval following N3225 20.7.7.6 when F is not a pointer. -template +template struct result_of : mpl::if_< - mpl::or_< is_pointer, is_member_function_pointer > + is_member_function_pointer , detail::tr1_result_of_impl< - typename remove_cv::type, + typename remove_cv::type, typename remove_cv::type(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)), false > , detail::cpp0x_result_of_impl< @@ -53,53 +56,119 @@ struct result_of namespace detail { -template -struct cpp0x_result_of_impl +#ifdef BOOST_NO_SFINAE_EXPR + +template +struct BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION()); + +template +struct BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION()) { + R operator()(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)) const; + typedef result_of_private_type const &(*pfn_t)(...); + operator pfn_t() const volatile; +}; + +template +struct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION()); + +template +struct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION()) + : BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION()) +{}; + +template +struct BOOST_PP_CAT(result_of_callable_fun_, BOOST_PP_ITERATION()) + : BOOST_PP_CAT(result_of_callable_fun_2_, BOOST_PP_ITERATION()) +{}; + +template +struct BOOST_PP_CAT(result_of_select_call_wrapper_type_, BOOST_PP_ITERATION()) + : mpl::eval_if< + is_class::type>, + result_of_wrap_callable_class, + mpl::identity::type> > + > +{}; + +template +struct BOOST_PP_CAT(result_of_is_callable_, BOOST_PP_ITERATION()) { + typedef typename BOOST_PP_CAT(result_of_select_call_wrapper_type_, BOOST_PP_ITERATION())::type wrapper_t; + static const bool value = ( + sizeof(result_of_no_type) == sizeof(detail::result_of_is_private_type( + (boost::declval()(BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval() BOOST_PP_INTERCEPT)), result_of_weird_type()) + )) + ); + typedef mpl::bool_ type; +}; + +template +struct cpp0x_result_of_impl + : lazy_enable_if< + BOOST_PP_CAT(result_of_is_callable_, BOOST_PP_ITERATION()) + , cpp0x_result_of_impl + > +{}; + +template +struct cpp0x_result_of_impl { typedef decltype( boost::declval()( - BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), declval() BOOST_PP_INTERCEPT) + BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval() BOOST_PP_INTERCEPT) ) ) type; }; -} // namespace detail +#else // BOOST_NO_SFINAE_EXPR -#else // defined(BOOST_NO_DECLTYPE) +template +struct cpp0x_result_of_impl()( + BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval() BOOST_PP_INTERCEPT) + ) + )>::type> { + typedef decltype( + boost::declval()( + BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ITERATION(), boost::declval() BOOST_PP_INTERCEPT) + ) + ) type; +}; + +#endif // BOOST_NO_SFINAE_EXPR + +} // namespace detail + +#else // defined(BOOST_RESULT_OF_USE_DECLTYPE) #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) -template +template struct result_of : tr1_result_of { }; #endif -#endif // defined(BOOST_NO_DECLTYPE) +#endif // defined(BOOST_RESULT_OF_USE_DECLTYPE) #undef BOOST_RESULT_OF_ARGS -#if BOOST_PP_ITERATION() >= 1 +#if BOOST_PP_ITERATION() >= 1 namespace detail { -template +template struct tr1_result_of_impl { typedef R type; }; -template +template struct tr1_result_of_impl { typedef R type; }; #if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551)) -template +template struct tr1_result_of_impl @@ -107,8 +176,7 @@ struct tr1_result_of_impl +template struct tr1_result_of_impl +template struct tr1_result_of_impl +template struct tr1_result_of_impl -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include #include +#include #include +#include #include #include #include +#include #include +#include #ifndef BOOST_RESULT_OF_NUM_ARGS -# define BOOST_RESULT_OF_NUM_ARGS 10 +# define BOOST_RESULT_OF_NUM_ARGS 16 +#endif + +// Use the decltype-based version of result_of by default if the compiler +// supports N3276 . +// The user can force the choice by defining either BOOST_RESULT_OF_USE_DECLTYPE or +// BOOST_RESULT_OF_USE_TR1, but not both! +#if defined(BOOST_RESULT_OF_USE_DECLTYPE) && defined(BOOST_RESULT_OF_USE_TR1) +# error Both BOOST_RESULT_OF_USE_DECLTYPE and BOOST_RESULT_OF_USE_TR1 cannot be defined at the same time. +#endif + +#ifndef BOOST_RESULT_OF_USE_TR1 +# ifndef BOOST_RESULT_OF_USE_DECLTYPE +# ifndef BOOST_NO_DECLTYPE_N3276 // this implies !defined(BOOST_NO_DECLTYPE) +# define BOOST_RESULT_OF_USE_DECLTYPE +# else +# define BOOST_RESULT_OF_USE_TR1 +# endif +# endif #endif namespace boost { @@ -41,7 +65,67 @@ namespace detail { BOOST_MPL_HAS_XXX_TRAIT_DEF(result_type) template struct tr1_result_of_impl; -template struct cpp0x_result_of_impl; + +#ifdef BOOST_NO_SFINAE_EXPR + +struct result_of_private_type {}; + +struct result_of_weird_type { + friend result_of_private_type operator,(result_of_private_type, result_of_weird_type); +}; + +typedef char result_of_yes_type; // sizeof(result_of_yes_type) == 1 +typedef char (&result_of_no_type)[2]; // sizeof(result_of_no_type) == 2 + +template +result_of_no_type result_of_is_private_type(T const &); +result_of_yes_type result_of_is_private_type(result_of_private_type); + +template +struct result_of_callable_class : C { + result_of_callable_class(); + typedef result_of_private_type const &(*pfn_t)(...); + operator pfn_t() const volatile; +}; + +template +struct result_of_wrap_callable_class { + typedef result_of_callable_class type; +}; + +template +struct result_of_wrap_callable_class { + typedef result_of_callable_class const type; +}; + +template +struct result_of_wrap_callable_class { + typedef result_of_callable_class volatile type; +}; + +template +struct result_of_wrap_callable_class { + typedef result_of_callable_class const volatile type; +}; + +template +struct result_of_wrap_callable_class { + typedef typename result_of_wrap_callable_class::type &type; +}; + +template struct cpp0x_result_of_impl; + +#else // BOOST_NO_SFINAE_EXPR + +template +struct result_of_always_void +{ + typedef void type; +}; + +template struct cpp0x_result_of_impl {}; + +#endif // BOOST_NO_SFINAE_EXPR template struct result_of_void_impl diff --git a/3party/boost/boost/uuid/seed_rng.hpp b/3party/boost/boost/uuid/seed_rng.hpp index d5d1e0fc6a..97b505f852 100644 --- a/3party/boost/boost/uuid/seed_rng.hpp +++ b/3party/boost/boost/uuid/seed_rng.hpp @@ -109,9 +109,10 @@ public: } private: + inline void ignore_size(size_t) {} + static unsigned int * sha1_random_digest_state_() { - // intentionally left uninitialized static unsigned int state[ 5 ]; return state; } @@ -153,12 +154,7 @@ private: if(random_) { - // the not_used variable is to suppress warnings -#if defined(__GNUC__) - __attribute__((unused)) -#endif - size_t not_used = 0; - not_used = std::fread( buffer, 1, 20, random_ ); + ignore_size(std::fread( buffer, 1, 20, random_ )); } // using an uninitialized buffer[] if fopen fails @@ -218,7 +214,7 @@ class generator_iterator > super_t; public: - generator_iterator() : m_g(NULL) {} + generator_iterator() : m_g(NULL), m_value(0) {} generator_iterator(Generator* g) : m_g(g), m_value((*m_g)()) {} void increment() diff --git a/3party/boost/boost/uuid/sha1.hpp b/3party/boost/boost/uuid/sha1.hpp index 3c1e341a5a..e695e13b21 100644 --- a/3party/boost/boost/uuid/sha1.hpp +++ b/3party/boost/boost/uuid/sha1.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #ifdef BOOST_NO_STDC_NAMESPACE namespace std { @@ -89,10 +90,17 @@ inline void sha1::process_byte(unsigned char byte) { process_byte_impl(byte); - bit_count_low += 8; - if (bit_count_low == 0) { - ++bit_count_high; - if (bit_count_high == 0) { + // size_t max value = 0xFFFFFFFF + //if (bit_count_low + 8 >= 0x100000000) { // would overflow + //if (bit_count_low >= 0x100000000-8) { + if (bit_count_low < 0xFFFFFFF8) { + bit_count_low += 8; + } else { + bit_count_low = 0; + + if (bit_count_high <= 0xFFFFFFFE) { + ++bit_count_high; + } else { BOOST_THROW_EXCEPTION(std::runtime_error("sha1 too many bytes")); } } diff --git a/3party/boost/boost/version.hpp b/3party/boost/boost/version.hpp index 3eeeb362b2..00d6ab8847 100644 --- a/3party/boost/boost/version.hpp +++ b/3party/boost/boost/version.hpp @@ -19,7 +19,7 @@ // BOOST_VERSION / 100 % 1000 is the minor version // BOOST_VERSION / 100000 is the major version -#define BOOST_VERSION 105100 +#define BOOST_VERSION 105200 // // BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION @@ -27,6 +27,6 @@ // number, y is the minor version number, and z is the patch level if not 0. // This is used by to select which library version to link to. -#define BOOST_LIB_VERSION "1_51" +#define BOOST_LIB_VERSION "1_52" #endif diff --git a/3party/boost/boost/wave/cpp_exceptions.hpp b/3party/boost/boost/wave/cpp_exceptions.hpp index 3af69ea0ce..805e56fc22 100644 --- a/3party/boost/boost/wave/cpp_exceptions.hpp +++ b/3party/boost/boost/wave/cpp_exceptions.hpp @@ -42,11 +42,11 @@ namespace util { severity_commandline_error, last_severity_code = severity_commandline_error }; - + inline char const * - get_severity(int level) + get_severity(int level) { - static char const *severity_text[] = + static char const *severity_text[] = { "remark", // severity_remark "warning", // severity_warning @@ -54,20 +54,20 @@ namespace util { "fatal error", // severity_fatal "command line error" // severity_commandline_error }; - BOOST_ASSERT(severity_remark <= level && + BOOST_ASSERT(severity_remark <= level && level <= last_severity_code); return severity_text[level]; } } /////////////////////////////////////////////////////////////////////////////// -// cpp_exception, the base class for all specific C preprocessor exceptions +// cpp_exception, the base class for all specific C preprocessor exceptions class BOOST_SYMBOL_VISIBLE cpp_exception : public std::exception { public: - cpp_exception(int line_, int column_, char const *filename_) throw() - : line(line_), column(column_) + cpp_exception(std::size_t line_, std::size_t column_, char const *filename_) throw() + : line(line_), column(column_) { unsigned int off = 0; while (off < sizeof(filename)-1 && *filename_) @@ -75,22 +75,22 @@ public: filename[off] = 0; } ~cpp_exception() throw() {} - + virtual char const *what() const throw() = 0; // to be overloaded virtual char const *description() const throw() = 0; virtual int get_errorcode() const throw() = 0; virtual int get_severity() const throw() = 0; virtual char const* get_related_name() const throw() = 0; virtual bool is_recoverable() const throw() = 0; - - int line_no() const throw() { return line; } - int column_no() const throw() { return column; } + + std::size_t line_no() const throw() { return line; } + std::size_t column_no() const throw() { return column; } char const *file_name() const throw() { return filename; } - + protected: char filename[512]; - int line; - int column; + std::size_t line; + std::size_t column; }; /////////////////////////////////////////////////////////////////////////////// @@ -149,9 +149,9 @@ public: last_error_number = pragma_message_directive }; - preprocess_exception(char const *what_, error_code code, int line_, - int column_, char const *filename_) throw() - : cpp_exception(line_, column_, filename_), + preprocess_exception(char const *what_, error_code code, std::size_t line_, + std::size_t column_, char const *filename_) throw() + : cpp_exception(line_, column_, filename_), code(code) { unsigned int off = 0; @@ -160,7 +160,7 @@ public: buffer[off] = 0; } ~preprocess_exception() throw() {} - + virtual char const *what() const throw() { return "boost::wave::preprocess_exception"; @@ -184,7 +184,7 @@ public: virtual bool is_recoverable() const throw() { switch (get_errorcode()) { - // these are the exceptions thrown during processing not supposed to + // these are the exceptions thrown during processing not supposed to // produce any tokens on the context::iterator level case preprocess_exception::no_error: // just a placeholder case preprocess_exception::macro_redefinition: @@ -221,7 +221,7 @@ public: case preprocess_exception::ill_formed_pragma_message: case preprocess_exception::pragma_message_directive: return true; - + case preprocess_exception::unexpected_error: case preprocess_exception::ill_formed_operator: case preprocess_exception::too_few_macroarguments: @@ -234,7 +234,7 @@ public: } return false; } - + static char const *error_text(int code) { // error texts in this array must appear in the same order as the items in @@ -370,8 +370,8 @@ class BOOST_SYMBOL_VISIBLE macro_handling_exception : public preprocess_exception { public: - macro_handling_exception(char const *what_, error_code code, int line_, - int column_, char const *filename_, char const *macroname) throw() + macro_handling_exception(char const *what_, error_code code, std::size_t line_, + std::size_t column_, char const *filename_, char const *macroname) throw() : preprocess_exception(what_, code, line_, column_, filename_) { unsigned int off = 0; @@ -380,7 +380,7 @@ public: name[off] = 0; } ~macro_handling_exception() throw() {} - + virtual char const *what() const throw() { return "boost::wave::macro_handling_exception"; @@ -396,10 +396,10 @@ private: /////////////////////////////////////////////////////////////////////////////// // -// The is_recoverable() function allows to decide, whether it is possible +// The is_recoverable() function allows to decide, whether it is possible // simply to continue after a given exception was thrown by Wave. // -// This is kind of a hack to allow to recover from certain errors as long as +// This is kind of a hack to allow to recover from certain errors as long as // Wave doesn't provide better means of error recovery. // /////////////////////////////////////////////////////////////////////////////// diff --git a/3party/boost/boost/wave/cpp_iteration_context.hpp b/3party/boost/boost/wave/cpp_iteration_context.hpp index 78c5590ce4..da83ea5db2 100644 --- a/3party/boost/boost/wave/cpp_iteration_context.hpp +++ b/3party/boost/boost/wave/cpp_iteration_context.hpp @@ -124,8 +124,8 @@ struct base_iteration_context BOOST_WAVE_STRINGTYPE real_filename; // real name of the current file BOOST_WAVE_STRINGTYPE real_relative_filename; // real relative name of the current file BOOST_WAVE_STRINGTYPE filename; // actual processed file - unsigned int line; // line counter of underlying stream - unsigned int emitted_lines; // count of emitted newlines + std::size_t line; // line counter of underlying stream + std::size_t emitted_lines; // count of emitted newlines std::size_t if_block_depth; // depth of #if block recursion ContextT& ctx; // corresponding context<> object file_type type; // the type of the handled file diff --git a/3party/boost/boost/wave/cpplexer/cpplexer_exceptions.hpp b/3party/boost/boost/wave/cpplexer/cpplexer_exceptions.hpp index 933c400b5f..ce6af0e7cf 100644 --- a/3party/boost/boost/wave/cpplexer/cpplexer_exceptions.hpp +++ b/3party/boost/boost/wave/cpplexer/cpplexer_exceptions.hpp @@ -110,11 +110,11 @@ namespace util { severity_error, severity_fatal }; - + inline char const * - get_severity(severity level) + get_severity(severity level) { - static char const *severity_text[] = + static char const *severity_text[] = { "remark", // severity_remark "warning", // severity_warning @@ -127,13 +127,13 @@ namespace util { } /////////////////////////////////////////////////////////////////////////////// -// cpplexer_exception, the base class for all specific C++ lexer exceptions +// cpplexer_exception, the base class for all specific C++ lexer exceptions class BOOST_SYMBOL_VISIBLE cpplexer_exception : public std::exception { public: - cpplexer_exception(int line_, int column_, char const *filename_) throw() - : line(line_), column(column_) + cpplexer_exception(std::size_t line_, std::size_t column_, char const *filename_) throw() + : line(line_), column(column_) { unsigned int off = 0; while (off < sizeof(filename)-1 && *filename_) @@ -141,21 +141,21 @@ public: filename[off] = 0; } ~cpplexer_exception() throw() {} - + virtual char const *what() const throw() = 0; // to be overloaded virtual char const *description() const throw() = 0; virtual int get_errorcode() const throw() = 0; virtual int get_severity() const throw() = 0; virtual bool is_recoverable() const throw() = 0; - int line_no() const throw() { return line; } - int column_no() const throw() { return column; } + std::size_t line_no() const throw() { return line; } + std::size_t column_no() const throw() { return column; } char const *file_name() const throw() { return filename; } - + protected: char filename[512]; - int line; - int column; + std::size_t line; + std::size_t column; }; /////////////////////////////////////////////////////////////////////////////// @@ -174,18 +174,18 @@ public: generic_lexing_warning = 6 }; - lexing_exception(char const *what_, error_code code, int line_, - int column_, char const *filename_) throw() - : cpplexer_exception(line_, column_, filename_), + lexing_exception(char const *what_, error_code code, std::size_t line_, + std::size_t column_, char const *filename_) throw() + : cpplexer_exception(line_, column_, filename_), level(severity_level(code)), code(code) { unsigned int off = 0; - while (off < sizeof(buffer) && *what_) + while (off < sizeof(buffer)-1 && *what_) buffer[off++] = *what_++; buffer[off] = 0; } ~lexing_exception() throw() {} - + virtual char const *what() const throw() { return "boost::wave::lexing_exception"; @@ -212,14 +212,14 @@ public: case lexing_exception::generic_lexing_warning: case lexing_exception::generic_lexing_error: return true; // for now allow all exceptions to be recoverable - + case lexing_exception::unexpected_error: default: break; } return false; } - + static char const *error_text(int code) { // error texts in this array must appear in the same order as the items in @@ -229,7 +229,7 @@ public: "universal character name specifies an invalid character", // universal_char_invalid "a universal character name cannot designate a character in the " "basic character set", // universal_char_base_charset - "this universal character is not allowed in an identifier", // universal_char_not_allowed + "this universal character is not allowed in an identifier", // universal_char_not_allowed "long long suffixes are not allowed in pure C++ mode, " "enable long_long mode to allow these", // invalid_long_long_literal "generic lexer error", // generic_lexing_error @@ -246,7 +246,7 @@ public: util::severity_error, // universal_char_base_charset util::severity_error, // universal_char_not_allowed util::severity_warning, // invalid_long_long_literal - util::severity_error, // generic_lexing_error + util::severity_error, // generic_lexing_error util::severity_warning // invalid_long_long_literal }; return preprocess_exception_severity[code]; @@ -264,10 +264,10 @@ private: /////////////////////////////////////////////////////////////////////////////// // -// The is_recoverable() function allows to decide, whether it is possible +// The is_recoverable() function allows to decide, whether it is possible // simply to continue after a given exception was thrown by Wave. // -// This is kind of a hack to allow to recover from certain errors as long as +// This is kind of a hack to allow to recover from certain errors as long as // Wave doesn't provide better means of error recovery. // /////////////////////////////////////////////////////////////////////////////// @@ -280,7 +280,7 @@ is_recoverable(lexing_exception const& e) /////////////////////////////////////////////////////////////////////////////// } // namespace cpplexer } // namespace wave -} // namespace boost +} // namespace boost // the suffix header occurs after all of the code #ifdef BOOST_HAS_ABI_HEADERS diff --git a/3party/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp b/3party/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp index d22a0154ae..e261545323 100644 --- a/3party/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp +++ b/3party/boost/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp @@ -54,21 +54,21 @@ namespace cpplexer { namespace re2clex { /////////////////////////////////////////////////////////////////////////////// -// +// // encapsulation of the re2c based cpp lexer // /////////////////////////////////////////////////////////////////////////////// -template > -class lexer +class lexer { public: typedef TokenT token_type; typedef typename token_type::string_type string_type; - lexer(IteratorT const &first, IteratorT const &last, + lexer(IteratorT const &first, IteratorT const &last, PositionT const &pos, boost::wave::language_support language_); ~lexer(); @@ -82,9 +82,9 @@ public: scanner.file_name = filename.c_str(); } #if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0 - bool has_include_guards(std::string& guard_name) const - { - return guards.detected(guard_name); + bool has_include_guards(std::string& guard_name) const + { + return guards.detected(guard_name); } #endif @@ -111,12 +111,12 @@ private: }; /////////////////////////////////////////////////////////////////////////////// -// initialize cpp lexer +// initialize cpp lexer template inline -lexer::lexer(IteratorT const &first, - IteratorT const &last, PositionT const &pos, - boost::wave::language_support language_) +lexer::lexer(IteratorT const &first, + IteratorT const &last, PositionT const &pos, + boost::wave::language_support language_) : filename(pos.get_file()), at_eof(false), language(language_) #if BOOST_WAVE_SUPPORT_THREADING != 0 , cache() @@ -127,7 +127,7 @@ lexer::lexer(IteratorT const &first, scanner.eol_offsets = aq_create(); if (first != last) { scanner.first = scanner.act = (uchar *)&(*first); - scanner.last = scanner.first + std::distance(first, last); + scanner.last = scanner.first + std::distance(first, last); } scanner.line = pos.get_line(); scanner.column = scanner.curr_column = pos.get_column(); @@ -162,7 +162,7 @@ lexer::lexer(IteratorT const &first, template inline -lexer::~lexer() +lexer::~lexer() { using namespace std; // some systems have free in std aq_terminate(scanner.eol_offsets); @@ -175,31 +175,31 @@ template inline TokenT& lexer::get(TokenT& result) { - if (at_eof) + if (at_eof) return result = token_type(); // return T_EOI - unsigned int actline = scanner.line; + std::size_t actline = scanner.line; token_id id = token_id(scan(&scanner)); switch (static_cast(id)) { case T_IDENTIFIER: // test identifier characters for validity (throws if invalid chars found) - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); if (!boost::wave::need_no_character_validation(language)) - impl::validate_identifier_name(value, actline, scanner.column, filename); + impl::validate_identifier_name(value, actline, scanner.column, filename); break; case T_STRINGLIT: case T_CHARLIT: case T_RAWSTRINGLIT: // test literal characters for validity (throws if invalid chars found) - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); if (boost::wave::need_convert_trigraphs(language)) - value = impl::convert_trigraphs(value); + value = impl::convert_trigraphs(value); if (!boost::wave::need_no_character_validation(language)) - impl::validate_literal(value, actline, scanner.column, filename); + impl::validate_literal(value, actline, scanner.column, filename); break; #if BOOST_WAVE_SUPPORT_INCLUDE_NEXT != 0 @@ -208,7 +208,7 @@ lexer::get(TokenT& result) case T_PP_INCLUDE: // convert to the corresponding ..._next token, if appropriate { - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); // Skip '#' and whitespace and see whether we find an 'include_next' here. @@ -220,11 +220,11 @@ lexer::get(TokenT& result) #endif case T_LONGINTLIT: // supported in C++11, C99 and long_long mode - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); if (!boost::wave::need_long_long(language)) { // syntax error: not allowed in C++ mode - BOOST_WAVE_LEXER_THROW(lexing_exception, invalid_long_long_literal, + BOOST_WAVE_LEXER_THROW(lexing_exception, invalid_long_long_literal, value.c_str(), actline, scanner.column, filename.c_str()); } break; @@ -241,7 +241,7 @@ lexer::get(TokenT& result) case T_SPACE2: case T_ANY: case T_PP_NUMBER: - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); break; @@ -264,7 +264,7 @@ lexer::get(TokenT& result) value = cache.get_token_value(BASEID_FROM_TOKEN(id)); } else { - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); } break; @@ -272,10 +272,10 @@ lexer::get(TokenT& result) case T_ANY_TRIGRAPH: if (boost::wave::need_convert_trigraphs(language)) { value = impl::convert_trigraph( - string_type((char const *)scanner.tok)); + string_type((char const *)scanner.tok)); } else { - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); } break; @@ -284,7 +284,7 @@ lexer::get(TokenT& result) if (CATEGORY_FROM_TOKEN(id) != EXTCATEGORY_FROM_TOKEN(id) || IS_CATEGORY(id, UnknownTokenType)) { - value = string_type((char const *)scanner.tok, + value = string_type((char const *)scanner.tok, scanner.cur-scanner.tok); } else { @@ -306,8 +306,8 @@ lexer::get(TokenT& result) } template -inline int -lexer::report_error(Scanner const *s, int errcode, +inline int +lexer::report_error(Scanner const *s, int errcode, char const *msg, ...) { BOOST_ASSERT(0 != s); @@ -321,28 +321,28 @@ lexer::report_error(Scanner const *s, int errcode, vsprintf(buffer, msg, params); va_end(params); - BOOST_WAVE_LEXER_THROW_VAR(lexing_exception, errcode, buffer, s->line, + BOOST_WAVE_LEXER_THROW_VAR(lexing_exception, errcode, buffer, s->line, s->column, s->file_name); // BOOST_UNREACHABLE_RETURN(0); return 0; } /////////////////////////////////////////////////////////////////////////////// -// +// // lex_functor -// +// /////////////////////////////////////////////////////////////////////////////// -template ::token_type> -class lex_functor +class lex_functor : public lex_input_interface_generator { public: typedef TokenT token_type; - lex_functor(IteratorT const &first, IteratorT const &last, + lex_functor(IteratorT const &first, IteratorT const &last, PositionT const &pos, boost::wave::language_support language) : re2c_lexer(first, last, pos, language) {} @@ -352,7 +352,7 @@ public: token_type& get(token_type& result) { return re2c_lexer.get(result); } void set_position(PositionT const &pos) { re2c_lexer.set_position(pos); } #if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0 - bool has_include_guards(std::string& guard_name) const + bool has_include_guards(std::string& guard_name) const { return re2c_lexer.has_include_guards(guard_name); } #endif @@ -364,16 +364,16 @@ private: /////////////////////////////////////////////////////////////////////////////// template token_cache::string_type> const - lexer::cache = + lexer::cache = token_cache::string_type>(); #endif } // namespace re2clex /////////////////////////////////////////////////////////////////////////////// -// +// // The new_lexer_gen<>::new_lexer function (declared in cpp_lex_interface.hpp) -// should be defined inline, if the lex_functor shouldn't be instantiated +// should be defined inline, if the lex_functor shouldn't be instantiated // separately from the lex_iterator. // // Separate (explicit) instantiation helps to reduce compilation time. @@ -384,21 +384,21 @@ token_cache::string_type> const #define BOOST_WAVE_RE2C_NEW_LEXER_INLINE #else #define BOOST_WAVE_RE2C_NEW_LEXER_INLINE inline -#endif +#endif /////////////////////////////////////////////////////////////////////////////// // // The 'new_lexer' function allows the opaque generation of a new lexer object. -// It is coupled to the iterator type to allow to decouple the lexer/iterator +// It is coupled to the iterator type to allow to decouple the lexer/iterator // configurations at compile time. // -// This function is declared inside the cpp_lex_token.hpp file, which is +// This function is declared inside the cpp_lex_token.hpp file, which is // referenced by the source file calling the lexer and the source file, which -// instantiates the lex_functor. But is is defined here, so it will be -// instantiated only while compiling the source file, which instantiates the +// instantiates the lex_functor. But is is defined here, so it will be +// instantiated only while compiling the source file, which instantiates the // lex_functor. While the cpp_re2c_token.hpp file may be included everywhere, // this file (cpp_re2c_lexer.hpp) should be included only once. This allows -// to decouple the lexer interface from the lexer implementation and reduces +// to decouple the lexer interface from the lexer implementation and reduces // compilation time. // /////////////////////////////////////////////////////////////////////////////// @@ -407,7 +407,7 @@ template BOOST_WAVE_RE2C_NEW_LEXER_INLINE lex_input_interface * new_lexer_gen::new_lexer(IteratorT const &first, - IteratorT const &last, PositionT const &pos, + IteratorT const &last, PositionT const &pos, boost::wave::language_support language) { using re2clex::lex_functor; @@ -419,7 +419,7 @@ new_lexer_gen::new_lexer(IteratorT const &first, /////////////////////////////////////////////////////////////////////////////// } // namespace cpplexer } // namespace wave -} // namespace boost +} // namespace boost // the suffix header occurs after all of the code #ifdef BOOST_HAS_ABI_HEADERS diff --git a/3party/boost/boost/wave/cpplexer/re2clex/scanner.hpp b/3party/boost/boost/wave/cpplexer/re2clex/scanner.hpp index 1c696cf69b..a2c36f99b6 100644 --- a/3party/boost/boost/wave/cpplexer/re2clex/scanner.hpp +++ b/3party/boost/boost/wave/cpplexer/re2clex/scanner.hpp @@ -4,8 +4,8 @@ http://www.boost.org/ Copyright (c) 2001 Daniel C. Nuffer. - Copyright (c) 2001-2012 Hartmut Kaiser. - Distributed under the Boost Software License, Version 1.0. (See accompanying + Copyright (c) 2001-2012 Hartmut Kaiser. + 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) =============================================================================*/ @@ -28,7 +28,7 @@ namespace re2clex { struct Scanner; typedef unsigned char uchar; -typedef int (* ReportErrorProc)(struct Scanner const *, int errorcode, +typedef int (* ReportErrorProc)(struct Scanner const *, int errorcode, char const *, ...); typedef struct Scanner { @@ -37,7 +37,7 @@ typedef struct Scanner { uchar* last; /* end (one past last char) of input buffer */ uchar* bot; /* beginning of the current buffer */ uchar* top; /* top of the current buffer */ - uchar* eof; /* when we read in the last buffer, will point 1 past the + uchar* eof; /* when we read in the last buffer, will point 1 past the end of the file, otherwise 0 */ uchar* tok; /* points to the beginning of the current token */ uchar* ptr; /* used for YYMARKER - saves backtracking info */ @@ -45,10 +45,10 @@ typedef struct Scanner { uchar* lim; /* used for YYLIMIT - points to the end of the buffer */ /* (lim == top) except for the last buffer, it points to the end of the input (lim == eof - 1) */ - unsigned int line; /* current line being lex'ed */ - unsigned int column; /* current token start column position */ - unsigned int curr_column; /* current column position */ - ReportErrorProc error_proc; /* must be != 0, this function is called to + std::size_t line; /* current line being lex'ed */ + std::size_t column; /* current token start column position */ + std::size_t curr_column; /* current column position */ + ReportErrorProc error_proc; /* must be != 0, this function is called to report an error */ char const *file_name; /* name of the lex'ed file */ aq_queue eol_offsets; diff --git a/3party/boost/boost/wave/cpplexer/validate_universal_char.hpp b/3party/boost/boost/wave/cpplexer/validate_universal_char.hpp index 9429bd12f3..ccb536cd57 100644 --- a/3party/boost/boost/wave/cpplexer/validate_universal_char.hpp +++ b/3party/boost/boost/wave/cpplexer/validate_universal_char.hpp @@ -2,7 +2,7 @@ Boost.Wave: A Standard compliant C++ preprocessor library Grammar for universal character validation (see C++ standard: Annex E) - + http://www.boost.org/ Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost @@ -37,12 +37,12 @@ enum universal_char_type { }; /////////////////////////////////////////////////////////////////////////// -// -// is_range is a helper function for the classification by brute force +// +// is_range is a helper function for the classification by brute force // below // /////////////////////////////////////////////////////////////////////////// -inline bool +inline bool in_range(unsigned long ch, unsigned long l, unsigned long u) { return (l <= ch && ch <= u); @@ -67,15 +67,15 @@ in_range(unsigned long ch, unsigned long l, unsigned long u) // Implementation note: // This classification isn't implemented very effectively here. This // function should be rewritten with some range run matching algorithm. -// +// /////////////////////////////////////////////////////////////////////////////// -inline universal_char_type +inline universal_char_type classify_universal_char (unsigned long ch) { // test for invalid characters if (ch <= 0x0020 || in_range(ch, 0x007f, 0x009f)) return universal_char_type_invalid; - + // test for characters in the range of the base character set if (in_range(ch, 0x0021, 0x005f) || in_range(ch, 0x0061, 0x007e)) return universal_char_type_base_charset; @@ -88,7 +88,7 @@ classify_universal_char (unsigned long ch) { return universal_char_type_valid; // Latin } - + if (0x0384 == ch || in_range(ch, 0x0388, 0x038a) || 0x038c == ch || in_range(ch, 0x038e, 0x03a1) || in_range(ch, 0x03a3, 0x03ce) || in_range(ch, 0x03d0, 0x03d6) || @@ -96,7 +96,7 @@ classify_universal_char (unsigned long ch) in_range(ch, 0x03e2, 0x03f3) || in_range(ch, 0x1f00, 0x1f15) || in_range(ch, 0x1f18, 0x1f1d) || in_range(ch, 0x1f20, 0x1f45) || in_range(ch, 0x1f48, 0x1f4d) || in_range(ch, 0x1f50, 0x1f57) || - 0x1f59 == ch || 0x1f5b == ch || 0x1f5d == ch || + 0x1f59 == ch || 0x1f5b == ch || 0x1f5d == ch || in_range(ch, 0x1f5f, 0x1f7d) || in_range(ch, 0x1f80, 0x1fb4) || in_range(ch, 0x1fb6, 0x1fbc) || in_range(ch, 0x1fc2, 0x1fc4) || in_range(ch, 0x1fc6, 0x1fcc) || in_range(ch, 0x1fd0, 0x1fd3) || @@ -105,7 +105,7 @@ classify_universal_char (unsigned long ch) { return universal_char_type_valid; // Greek } - + if (in_range(ch, 0x0401, 0x040d) || in_range(ch, 0x040f, 0x044f) || in_range(ch, 0x0451, 0x045c) || in_range(ch, 0x045e, 0x0481) || in_range(ch, 0x0490, 0x04c4) || in_range(ch, 0x04c7, 0x04c8) || @@ -114,20 +114,20 @@ classify_universal_char (unsigned long ch) { return universal_char_type_valid; // Cyrillic } - + if (in_range(ch, 0x0531, 0x0556) || in_range(ch, 0x0561, 0x0587)) return universal_char_type_valid; // Armenian if (in_range(ch, 0x05d0, 0x05ea) || in_range(ch, 0x05f0, 0x05f4)) return universal_char_type_valid; // Hebrew - + if (in_range(ch, 0x0621, 0x063a) || in_range(ch, 0x0640, 0x0652) || in_range(ch, 0x0670, 0x06b7) || in_range(ch, 0x06ba, 0x06be) || in_range(ch, 0x06c0, 0x06ce) || in_range(ch, 0x06e5, 0x06e7)) { return universal_char_type_valid; // Arabic } - + if (in_range(ch, 0x0905, 0x0939) || in_range(ch, 0x0958, 0x0962)) return universal_char_type_valid; // Devanagari @@ -139,7 +139,7 @@ classify_universal_char (unsigned long ch) { return universal_char_type_valid; // Bengali } - + if (in_range(ch, 0x0a05, 0x0a0a) || in_range(ch, 0x0a0f, 0x0a10) || in_range(ch, 0x0a13, 0x0a28) || in_range(ch, 0x0a2a, 0x0a30) || in_range(ch, 0x0a32, 0x0a33) || in_range(ch, 0x0a35, 0x0a36) || @@ -209,49 +209,49 @@ classify_universal_char (unsigned long ch) // validate_identifier_name // // The validate_identifier_name function tests a given identifier name for -// its validity with regard to eventually contained universal characters. -// These should be in valid ranges (see the function +// its validity with regard to eventually contained universal characters. +// These should be in valid ranges (see the function // classify_universal_char above). // -// If the identifier name contains invalid or not allowed universal +// If the identifier name contains invalid or not allowed universal // characters a corresponding lexing_exception is thrown. // /////////////////////////////////////////////////////////////////////////////// template -inline void -validate_identifier_name (StringT const &name, int line, int column, - StringT const &file_name) +inline void +validate_identifier_name (StringT const &name, std::size_t line, + std::size_t column, StringT const &file_name) { using namespace std; // some systems have strtoul in namespace std:: - + typename StringT::size_type pos = name.find_first_of('\\'); while (StringT::npos != pos) { // the identifier name contains a backslash (must be universal char) BOOST_ASSERT('u' == name[pos+1] || 'U' == name[pos+1]); - + StringT uchar_val(name.substr(pos+2, ('u' == name[pos+1]) ? 4 : 8)); - universal_char_type type = - classify_universal_char(strtoul(uchar_val.c_str(), 0, 16)); - + universal_char_type type = + classify_universal_char(strtoul(uchar_val.c_str(), 0, 16)); + if (universal_char_type_valid != type) { // an invalid char was found, so throw an exception StringT error_uchar(name.substr(pos, ('u' == name[pos+1]) ? 6 : 10)); - + if (universal_char_type_invalid == type) { - BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_invalid, + BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_invalid, error_uchar, line, column, file_name.c_str()); } else if (universal_char_type_base_charset == type) { - BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_base_charset, + BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_base_charset, error_uchar, line, column, file_name.c_str()); } else { - BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_not_allowed, + BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_not_allowed, error_uchar, line, column, file_name.c_str()); } } - + // find next universal char (if appropriate) pos = name.find_first_of('\\', pos+2); } @@ -261,55 +261,55 @@ typename StringT::size_type pos = name.find_first_of('\\'); // // validate_literal // -// The validate_literal function tests a given string or character literal -// for its validity with regard to eventually contained universal -// characters. These should be in valid ranges (see the function +// The validate_literal function tests a given string or character literal +// for its validity with regard to eventually contained universal +// characters. These should be in valid ranges (see the function // classify_universal_char above). // -// If the string or character literal contains invalid or not allowed +// If the string or character literal contains invalid or not allowed // universal characters a corresponding lexing_exception is thrown. // /////////////////////////////////////////////////////////////////////////////// template -inline void -validate_literal (StringT const &name, int line, int column, +inline void +validate_literal (StringT const &name, std::size_t line, std::size_t column, StringT const &file_name) { using namespace std; // some systems have strtoul in namespace std:: - + typename StringT::size_type pos = name.find_first_of('\\'); while (StringT::npos != pos) { // the literal contains a backslash (may be universal char) if ('u' == name[pos+1] || 'U' == name[pos+1]) { StringT uchar_val(name.substr(pos+2, ('u' == name[pos+1]) ? 4 : 8)); - universal_char_type type = - classify_universal_char(strtoul(uchar_val.c_str(), 0, 16)); - - if (universal_char_type_valid != type && - universal_char_type_not_allowed_for_identifiers != type) + universal_char_type type = + classify_universal_char(strtoul(uchar_val.c_str(), 0, 16)); + + if (universal_char_type_valid != type && + universal_char_type_not_allowed_for_identifiers != type) { // an invalid char was found, so throw an exception StringT error_uchar(name.substr(pos, ('u' == name[pos+1]) ? 6 : 10)); - + if (universal_char_type_invalid == type) { - BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_invalid, + BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_invalid, error_uchar, line, column, file_name.c_str()); } else { - BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_base_charset, + BOOST_WAVE_LEXER_THROW(lexing_exception, universal_char_base_charset, error_uchar, line, column, file_name.c_str()); } } } - + // find next universal char (if appropriate) pos = name.find_first_of('\\', pos+2); } } /////////////////////////////////////////////////////////////////////////////// -} // namespace impl +} // namespace impl } // namespace cpplexer } // namespace wave } // namespace boost diff --git a/3party/boost/boost/xpressive/detail/utility/literals.hpp b/3party/boost/boost/xpressive/detail/utility/literals.hpp index 67c9a42807..29ddefeb25 100644 --- a/3party/boost/boost/xpressive/detail/utility/literals.hpp +++ b/3party/boost/boost/xpressive/detail/utility/literals.hpp @@ -43,12 +43,12 @@ struct string_literal; template<> struct string_literal { - static char const *pick(char const *cstr, wchar_t const *) + static BOOST_CONSTEXPR char const *pick(char const *cstr, wchar_t const *) { return cstr; } - static char pick(char ch, wchar_t) + static BOOST_CONSTEXPR char pick(char ch, wchar_t) { return ch; } @@ -57,12 +57,12 @@ struct string_literal template<> struct string_literal { - static wchar_t const *pick(char const *, wchar_t const *cstr) + static BOOST_CONSTEXPR wchar_t const *pick(char const *, wchar_t const *cstr) { return cstr; } - static wchar_t pick(char, wchar_t ch) + static BOOST_CONSTEXPR wchar_t pick(char, wchar_t ch) { return ch; } diff --git a/3party/boost/boost/xpressive/regex_actions.hpp b/3party/boost/boost/xpressive/regex_actions.hpp index 1f9617ba31..b5a6d7c8f8 100644 --- a/3party/boost/boost/xpressive/regex_actions.hpp +++ b/3party/boost/boost/xpressive/regex_actions.hpp @@ -105,7 +105,7 @@ namespace boost { namespace xpressive { BOOST_PROTO_CALLABLE() template - struct result; + struct result {}; template struct result @@ -163,7 +163,7 @@ namespace boost { namespace xpressive { BOOST_PROTO_CALLABLE() template - struct result; + struct result {}; template struct result @@ -173,14 +173,12 @@ namespace boost { namespace xpressive template struct result + : mpl::if_c< + is_const::value + , typename Cont::const_reference + , typename Cont::reference + > { - typedef typename Cont::reference type; - }; - - template - struct result - { - typedef typename Cont::const_reference type; }; template @@ -505,7 +503,7 @@ namespace boost { namespace xpressive typedef UNREF(Cont) &type; }; - /// operator() + /// \brief operator() /// template typename result::type @@ -714,7 +712,7 @@ namespace boost { namespace xpressive { BOOST_PROTO_CALLABLE() template - struct result; + struct result {}; template struct result @@ -775,7 +773,7 @@ namespace boost { namespace xpressive : base_type(base_type::proto_base_expr::make(t)) {} - using base_type::operator =; + using base_type::operator=; T &get() { @@ -798,7 +796,7 @@ namespace boost { namespace xpressive : base_type(base_type::proto_base_expr::make(boost::ref(t))) {} - using base_type::operator =; + using base_type::operator=; T &get() const { @@ -823,7 +821,7 @@ namespace boost { namespace xpressive , base_type(base_type::make(boost::ref(detail::value_wrapper::value))) {} - using base_type::operator =; + using base_type::operator=; T &get() { diff --git a/3party/boost/boost/xpressive/regex_error.hpp b/3party/boost/boost/xpressive/regex_error.hpp index 77fd8cb872..6b801f2add 100644 --- a/3party/boost/boost/xpressive/regex_error.hpp +++ b/3party/boost/boost/xpressive/regex_error.hpp @@ -51,6 +51,7 @@ struct regex_error { /// Constructs an object of class regex_error. /// \param code The error_type this regex_error represents. + /// \param str The message string of this regex_error. /// \post code() == code explicit regex_error(regex_constants::error_type code, char const *str = "") : std::runtime_error(str) diff --git a/3party/boost/boost/xpressive/regex_primitives.hpp b/3party/boost/boost/xpressive/regex_primitives.hpp index 11230f60df..dcce60b491 100644 --- a/3party/boost/boost/xpressive/regex_primitives.hpp +++ b/3party/boost/boost/xpressive/regex_primitives.hpp @@ -161,7 +161,7 @@ namespace boost { namespace xpressive { namespace detail {} template - struct result; + struct result {}; template struct result diff --git a/3party/boost/boost/xpressive/regex_token_iterator.hpp b/3party/boost/boost/xpressive/regex_token_iterator.hpp index 0eb18d57aa..ba3a57298d 100644 --- a/3party/boost/boost/xpressive/regex_token_iterator.hpp +++ b/3party/boost/boost/xpressive/regex_token_iterator.hpp @@ -194,6 +194,7 @@ struct regex_token_iterator /// \param begin The beginning of the character range to search. /// \param end The end of the character range to search. /// \param rex The regex pattern to search for. + /// \param subs A range of integers designating sub-matches to be treated as tokens. /// \param flags Optional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.) /// \pre \c [begin,end) is a valid range. /// \pre \c subs is either an integer greater or equal to -1, @@ -219,6 +220,7 @@ struct regex_token_iterator /// \param begin The beginning of the character range to search. /// \param end The end of the character range to search. /// \param rex The regex pattern to search for. + /// \param subs A range of integers designating sub-matches to be treated as tokens. /// \param args A let() expression with argument bindings for semantic actions. /// \param flags Optional match flags, used to control how the expression is matched against the sequence. (See match_flag_type.) /// \pre \c [begin,end) is a valid range. diff --git a/3party/boost/boost/xpressive/sub_match.hpp b/3party/boost/boost/xpressive/sub_match.hpp index a5f9559983..279070c910 100644 --- a/3party/boost/boost/xpressive/sub_match.hpp +++ b/3party/boost/boost/xpressive/sub_match.hpp @@ -45,17 +45,18 @@ namespace boost { namespace xpressive /////////////////////////////////////////////////////////////////////////////// // sub_match // -/// \brief Class template sub_match denotes the sequence of characters matched by a particular marked sub-expression. +/// \brief Class template \c sub_match denotes the sequence of characters matched by a particular +/// marked sub-expression. /// -/// When the marked sub-expression denoted by an object of type sub_match\<\> participated in a -/// regular expression match then member matched evaluates to true, and members first and second -/// denote the range of characters [first,second) which formed that match. Otherwise matched is false, -/// and members first and second contained undefined values. +/// When the marked sub-expression denoted by an object of type \c sub_match\<\> participated in a +/// regular expression match then member \c matched evaluates to \c true, and members \c first and \c second +/// denote the range of characters [first,second) which formed that match. Otherwise \c matched is \c false, +/// and members \c first and \c second contained undefined values. /// -/// If an object of type sub_match\<\> represents sub-expression 0 - that is to say the whole match - -/// then member matched is always true, unless a partial match was obtained as a result of the flag -/// match_partial being passed to a regular expression algorithm, in which case member matched is -/// false, and members first and second represent the character range that formed the partial match. +/// If an object of type \c sub_match\<\> represents sub-expression 0 - that is to say the whole match - +/// then member \c matched is always \c true, unless a partial match was obtained as a result of the flag +/// \c match_partial being passed to a regular expression algorithm, in which case member \c matched is +/// \c false, and members \c first and \c second represent the character range that formed the partial match. template struct sub_match : std::pair @@ -111,7 +112,7 @@ public: /// \brief Performs a lexicographic string comparison /// \param str the string against which to compare - /// \return the results of (*this).str().compare(str) + /// \return the results of (*this).str().compare(str) int compare(string_type const &str) const { return this->str().compare(str); @@ -135,6 +136,44 @@ public: bool matched; }; +/////////////////////////////////////////////////////////////////////////////// +/// \brief \c range_begin() to make \c sub_match\<\> a valid range +/// \param sub the \c sub_match\<\> object denoting the range +/// \return \c sub.first +/// \pre \c sub.first is not singular +template +inline BidiIter range_begin(sub_match &sub) +{ + return sub.first; +} + +/// \overload +/// +template +inline BidiIter range_begin(sub_match const &sub) +{ + return sub.first; +} + +/////////////////////////////////////////////////////////////////////////////// +/// \brief \c range_end() to make \c sub_match\<\> a valid range +/// \param sub the \c sub_match\<\> object denoting the range +/// \return \c sub.second +/// \pre \c sub.second is not singular +template +inline BidiIter range_end(sub_match &sub) +{ + return sub.second; +} + +/// \overload +/// +template +inline BidiIter range_end(sub_match const &sub) +{ + return sub.second; +} + /////////////////////////////////////////////////////////////////////////////// /// \brief insertion operator for sending sub-matches to ostreams /// \param sout output stream. @@ -396,4 +435,34 @@ operator + (typename sub_match::string_type const &lhs, sub_match + struct range_mutable_iterator; + + /// INTERNAL ONLY + /// + template + struct range_mutable_iterator > + { + typedef BidiIter type; + }; + + /// INTERNAL ONLY + /// + template + struct range_const_iterator; + + /// INTERNAL ONLY + /// + template + struct range_const_iterator > + { + typedef BidiIter type; + }; +} + #endif diff --git a/3party/boost/boost/xpressive/traits/c_regex_traits.hpp b/3party/boost/boost/xpressive/traits/c_regex_traits.hpp index 805dcd3773..ba56c91c0a 100644 --- a/3party/boost/boost/xpressive/traits/c_regex_traits.hpp +++ b/3party/boost/boost/xpressive/traits/c_regex_traits.hpp @@ -113,7 +113,7 @@ struct regex_traits_version_1_tag; // c_regex_traits // /// \brief Encapsaulates the standard C locale functions for use by the -/// basic_regex\<\> class template. +/// \c basic_regex\<\> class template. template struct c_regex_traits : detail::c_regex_traits_base @@ -200,12 +200,12 @@ struct c_regex_traits return detail::c_toupper(ch); } - /// Returns a string_type containing all the characters that compare equal + /// Returns a \c string_type containing all the characters that compare equal /// disregrarding case to the one passed in. This function can only be called - /// if has_fold_case >::value is true. + /// if has_fold_case\ \>::value is \c true. /// /// \param ch The source character. - /// \return string_type containing all chars which are equal to ch when disregarding + /// \return \c string_type containing all chars which are equal to \c ch when disregarding /// case //typedef array fold_case_type; string_type fold_case(char_type ch) const diff --git a/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp b/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp index 74a904cd12..2d12f9ef79 100644 --- a/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp +++ b/3party/boost/boost/xpressive/traits/cpp_regex_traits.hpp @@ -311,8 +311,8 @@ namespace detail /////////////////////////////////////////////////////////////////////////////// // cpp_regex_traits // -/// \brief Encapsaulates a std::locale for use by the -/// basic_regex\<\> class template. +/// \brief Encapsaulates a \c std::locale for use by the +/// \c basic_regex\<\> class template. template struct cpp_regex_traits : detail::cpp_regex_traits_base @@ -404,12 +404,12 @@ struct cpp_regex_traits return this->ctype_->toupper(ch); } - /// Returns a string_type containing all the characters that compare equal + /// Returns a \c string_type containing all the characters that compare equal /// disregrarding case to the one passed in. This function can only be called - /// if has_fold_case\ \>::value is true. + /// if has_fold_case\ \>::value is \c true. /// /// \param ch The source character. - /// \return string_type containing all chars which are equal to ch when disregarding + /// \return \c string_type containing all chars which are equal to \c ch when disregarding /// case string_type fold_case(char_type ch) const { @@ -607,7 +607,7 @@ private: /// INTERNAL ONLY static char_class_pair const &char_class(std::size_t j) { - static char_class_pair const s_char_class_map[] = + static BOOST_CONSTEXPR_OR_CONST char_class_pair s_char_class_map[] = { { BOOST_XPR_CSTR_(char_type, "alnum"), detail::std_ctype_alnum } , { BOOST_XPR_CSTR_(char_type, "alpha"), detail::std_ctype_alpha }